home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 7 / FM Towns Free Software Collection 7.iso / fb386 / test_rpg / test_rpg.bas next >
BASIC Source File  |  1993-11-30  |  106KB  |  2,237 lines

  1. 10000 '☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
  2. 10010 '☆                          ☆
  3. 10020 '☆ 16色スプライトBG用 マップ・エディター v1.0 ☆
  4. 10030 '☆                          ☆
  5. 10040 '☆        中枢部抜き出し版          ☆
  6. 10050 '☆                          ☆
  7. 10060 '☆   1991-1993 (c)Miezchen   ☆
  8. 10070 '☆                          ☆
  9. 10080 '☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
  10. 10090 :
  11. 10100 :
  12. 10110 CLEAR ,,512,2700000,65536
  13. 10120 ON ERROR GOTO *ERROR:STOP OFF
  14. 10130 RANDOMIZE TIME
  15. 10140 SCREEN@ 0:WIDTH 80,25:CONSOLE 0,25,0:COLOR 7,0',,4
  16. 10150 DEFLNG A-Z:DEFLNG 転:CLS
  17. 10160 DEF FONT "システム   16ドット"
  18. 10170 WINDOW (0,0)-(1023,511):VIEW (0,0)-(1023,511)
  19. 10180 :
  20. 10190 SENUMMAX=30
  21. 10200 :
  22. 10210 ON KEY(1) GOSUB *INTERRUPT:KEY (1) ON
  23. 10220 SYS_PATH$="":DAT_PATH$="map\":USER_PATH$="user\"
  24. 10230 :
  25. 10240 DIM BG%(63),BG_SUB%(255),DUMMY_ADD(17*17*2/4-1)
  26. 10250 DIM BG_BUF%(64*16*64-1),CODE_BUF%(31,15),P_BUF2%(16962),WINDOW_BUF%(323*115/4)
  27. 10260 DIM SEL4WINB(20*6*16*16/8),SEL2WINB(20*6*16*16/8),MNAMEW(16*16/2*18*3/4-1)
  28. 10270 DIM W_TILE_BUF(16*16/2*2/4-1)
  29. 10280 DIM DSEL_W%(196*211/4-1),MCX%(31),MCX2%(31)
  30. 10290 DIM MX1(1),MX2(1),MY1(1),MY2(1),PX1(1),PX2(1),PY1(1),PY2(1)
  31. 10300 DIM M_FRONT%(15*10-1,15*10-1),M_BACK%(15*10-1,15*10-1)
  32. 10310 DIM   JUDGE%(15*10-1,15*10-1),HEADER%(16384/2-1),MES_DATA(1024*256/4-1),MES_DATA2(255)
  33. 10320 DIM STACK%(255),BG_STACK(31),EGB_WORK%(40112/2),DATA_AREA%(256/2-1),RND_DATA%(1024/2)
  34. 10330 DIM MSWINB(16*16*36*10/2/4-1),W_TILE%(16*16/4-1),CUT_MES(16384/4-1),MPOCKET%(16384/2-1)
  35. 10340 DIM CW_X1(127),CW_Y1(127),CW_X2(127),CW_Y2(127),CW_OFS(127),CW_SW(127),CX(127),CY(127)
  36. 10350 DIM CWIN(1024*512/2/4-1),STBASE(16384/4-1),STBASEDUM(16384/4-1)
  37. 10360 DIM SENAME$(31),MUSNAME$(31),BASENUM$(15),SYSPALBUF(3*16/4-1)
  38. 10370 DIM E2_PTN%(360/18*2*17*17+17*17*2-1),NUL_DAT%(128*8*2/2-1),SIN_DAT(16*16/4-1)
  39. 10380 DIM PTN_BUF%(114688/2-1),PAL_BUF%(896/2-1)
  40. 10390 DIM COL_BUF%(8192/2-1),PAL_NO%(896-1),C_PTN%(1024*512/4-1),C_MAP%(1024*512/4-1)
  41. 10400 DIM PTN%(63),COL%(15)
  42. 10410 DIM DOOR1%(63),DOOR2%(63),DOOR3%(63),DOOR4%(63),DOOR5%(63),DOOR6%(63)
  43. 10420 DIM DOOR%(384-1),CRTC(31),MEM$(255),ICM$(255),MFLG%(255),FLG_STATUS(255)
  44. 10430 'DIM MIST%(1024*256/2/2-1)
  45. 10440 DIM THUNDER%(63744/2),RAIN%(20512/2-1)
  46. 10450 DIM DOOR1_A%(20000/2-1),DOOR1_B%(20000/2-1)
  47. 10460 DIM DOOR2_A%(20000/2-1),DOOR2_B%(20000/2-1)
  48. 10470 DIM DOOR3_A%(20000/2-1),DOOR3_B%(20000/2-1),DOOR3_C%(20000/2-1)
  49. 10480 'DIM DOOR4_A%(20000/2-1),DOOR4_B%(20000/2-1),DOOR4_C%(20000/2-1)
  50. 10490 DIM SE(20000*SENUMMAX/4-1),SEBUF(20000/4-1)
  51. 10500 'DIM MATSELW(16*16/2*9*5/4-1),PATSELW(16*16/2*20*19/4-1),MUSSELW(16*16/2*18*20/4-1)
  52. 10510 DIM TKMDIR$(16),PLAYTIME(15),TKM_DAT%(5)
  53. 10520 :
  54. 10530 GENERAL$=STRING$(255," ")
  55. 10540 :
  56. 10550 MWARPNAME$=STRING$(32," ")
  57. 10560 FOR I=0 TO 15:BASENUM$(I)=STRING$(32," "):NEXT
  58. 10570 :
  59. 10580 FOR I=0 TO 31:MUSNAME$="----":NEXT
  60. 10590 OPEN "I",#1,SYS_PATH$+"dat\musname.prg":J=0
  61. 10600 WHILE EOF(1)<>-1
  62. 10610  INPUT#1,MUSNAME$(J)
  63. 10620  IF LEN(MUSNAME$(J))<>0 THEN
  64. 10630    MUSNAME$(J)=MUSNAME$(J)+STRING$(20-KLEN(MUSNAME$(J))," "):J=J+1
  65. 10640  ENDIF
  66. 10650 WEND
  67. 10660 CLOSE #1
  68. 10670 :
  69. 10680 LOAD@ USER_PATH$+"stbase99.dat",STBASE:BASE_ADD=VARPTR(STBASE(0))
  70. 10690 :
  71. 10700 LOAD@ SYS_PATH$+"snd\rain    .snd",RAIN%
  72. 10710 LOAD@ SYS_PATH$+"snd\thunder .snd",THUNDER%
  73. 10720 LOAD@ SYS_PATH$+"snd\door1_A .snd",DOOR1_A%
  74. 10730 LOAD@ SYS_PATH$+"snd\door1_B .snd",DOOR1_B%
  75. 10740 LOAD@ SYS_PATH$+"snd\door2_A .snd",DOOR2_A%
  76. 10750 LOAD@ SYS_PATH$+"snd\door2_B .snd",DOOR2_B%
  77. 10760 LOAD@ SYS_PATH$+"snd\door3_A .snd",DOOR3_A%
  78. 10770 LOAD@ SYS_PATH$+"snd\door3_B .snd",DOOR3_B%
  79. 10780 LOAD@ SYS_PATH$+"snd\door3_C .snd",DOOR3_C%
  80. 10790 'LOAD@ SYS_PATH$+"snd\door4_A .snd",DOOR4_A%
  81. 10800 'LOAD@ SYS_PATH$+"snd\door4_B .snd",DOOR4_B%
  82. 10810 'LOAD@ SYS_PATH$+"snd\door4_C .snd",DOOR4_C%
  83. 10820 :
  84. 10830 LOAD@ "dat\erase2  .dat",E2_PTN%
  85. 10840 LOAD@ "dat\sin_data.dat",SIN_DAT
  86. 10850 :
  87. 10860 :
  88. 10870 OUT &HFDA0,&H03
  89. 10880 'LOAD@ SYS_PATH$+"pic\mist.tif"
  90. 10890 'GET@A(0,0)-(1023,255),MIST%:CLS
  91. 10900 :
  92. 10910 RESTORE 10910:FOR I=0 TO 8:READ WINCOL(I):NEXT:DATA 4,5,4,5,6,5,4,5,4
  93. 10920 :
  94. 10930 '>>>>> 各種変数設定 <<<<<
  95. 10940  SMODE$(0)="31":SMODE$(1)="24":SMODE$(2)="15":SCAN_FLG=0
  96. 10950  SW1$(0)="あり":SW1$(1)="なし":SW2$(0)="切":SW2$(1)="入":SW3$(0)="互換":SW3$(1)="高速"
  97. 10960  SW4$(0)="低速":SW4$(1)="普通":SW4$(2)="高速":SW4$(3)="試験"
  98. 10970  SW5$(0)="半透明":SW5$(1)="不透明"
  99. 10980  SC_STEP2=1
  100. 10990  SQ(0)=1024:SQ(1)=888:SQ(2)=658:SQ(3)=444:SQ(4)=222:SQ=2:MQ=2:MQ=16
  101. 11000  W_TILE$(0)=CHR$(&H70,&H70,&H70,&H70,&H07,&H07,&H07,&H07) :' 疑似半透明
  102. 11010  W_TILE$(1)=CHR$(&H88,&H88,&H88,&H88,&H88,&H88,&H88,&H88) :' 黒塗り
  103. 11020  FOR I=1 TO FIX(RND(1)*31)+1:MIST_TILE$=MIST_TILE$+CHR$(FIX(RND(1)*3)+1,FIX(RND(1)*3)+1,FIX(RND(1)*3)+1,FIX(RND(1)*3)+1,(FIX(RND(1)*3)+1)*&H10,(FIX(RND(1)*3)+1)*&H10,(FIX(RND(1)*3)+1)*&H10,(FIX(RND(1)*3)+1)*&H10):NEXT
  104. 11030  W_TYPE=0:X_RATIO=0:Y_RATIO=0
  105. 11040  PX(0)=0:PY(0)=0:PX(1)=0:PY(1)=-1:PX(2)= 1:PY(2)=-1:PX(3)= 1:PY(3)=0
  106. 11050  PX(4)=1:PY(4)=1:PX(5)=0:PY(5)= 1:PX(6)=-1:PY(6)= 1:PX(7)=-1:PY(7)=0:PX(8)=-1:PY(8)=-1
  107. 11060  MCPTN(0)=4
  108. 11070  MCPTN(1)=0:MCPTN(2)=2:MCPTN(3)=2:MCPTN(4)=2:MCPTN(5)=4:MCPTN(6)=6:MCPTN(7)=6:MCPTN(8)=6
  109. 11080  TKPTN(1)=4:TKPTN(3)=6:TKPTN(5)=0:TKPTN(7)=2
  110. 11090  :
  111. 11100  FOR I=0 TO 1
  112. 11110    LINE (768-1,16-1)-(768+15+1,16+15+1),PSET,%8,BF,W_TILE$(I) :'バックスペース用
  113. 11120    GET@A(768  ,16  )-(768+15  ,16+15  ),W_TILE_BUF,16*16/2/4*I
  114. 11130  NEXT
  115. 11140  :
  116. 11150  CLS
  117. 11160  :
  118. 11170  :
  119. 11180 '>>>>> プロシージャの先頭アドレス決定 <<<<<
  120. 11190  SPR_OFF =    0:SPR_QUANTITY=658
  121. 11200  THUNDER = 1024:T_SND=1
  122. 11210  MCHR_PAL= 2048
  123. 11220  CHR_DEF = 4096
  124. 11230  RAINFALL= 5120:EFCT_QUANTITY=44
  125. 11240  SNOWFALL= 7168
  126. 11250  CHR_OFF =11264
  127. 11260  REPLACE =12288
  128. 11270  ABSTRACT=13312
  129. 11280  ERASER  =14336
  130. 11290  BIT_SET =15360
  131. 11300  MAP_PUT =16384
  132. 11310  TRANS   =18432
  133. 11320  MTRANS  =19456
  134. 11330  BG_PUT  =22528
  135. 11340  BG_ROLL =25600:ANIME_QUANTITY=32:SC_STEP=4
  136. 11350  PAL_CHG =28672
  137. 11360  MREPLACE=44032
  138. 11370  R_ERASE =45056
  139. 11380  DIVERGE =47104
  140. 11390  BIT_SCAN=48128
  141. 11400  MREFER  =49152
  142. 11410  BG_ROLL2=50176
  143. 11420  LSHIFT  =53248
  144. 11430  NSEARCH =54272
  145. 11440  TKSEARCH=55296
  146. 11450  CD_PLAY =56320
  147. 11460  SND_PLAY=57344
  148. 11470  :
  149. 11480  LOADM SYS_PATH$+"rex\spr_off .rex",SPR_OFF
  150. 11490  LOADM SYS_PATH$+"rex\thunder .rex",THUNDER
  151. 11500  LOADM SYS_PATH$+"rex\mchr_pal.rex",MCHR_PAL
  152. 11510  LOADM SYS_PATH$+"rex\bg_roll .rex",BG_ROLL
  153. 11520  'LOADM SYS_PATH$+"rex\bg_roll2.rex",BG_ROLL2
  154. 11530  LOADM SYS_PATH$+"rex\chr_def .rex",CHR_DEF
  155. 11540  LOADM SYS_PATH$+"rex\rainfall.rex",RAINFALL
  156. 11550  'LOADM SYS_PATH$+"rex\snowfall.rex",SNOWFALL
  157. 11560  LOADM SYS_PATH$+"rex\bg_put  .rex",BG_PUT
  158. 11570  LOADM SYS_PATH$+"rex\chr_off .rex",CHR_OFF
  159. 11580  LOADM SYS_PATH$+"rex\replace .rex",REPLACE
  160. 11590  'LOADM SYS_PATH$+"rex\abstract.rex",ABSTRACT
  161. 11600  'LOADM SYS_PATH$+"rex\erase   .rex",ERASER
  162. 11610  LOADM SYS_PATH$+"rex\bit_set .rex",BIT_SET
  163. 11620  LOADM SYS_PATH$+"rex\map_put .rex",MAP_PUT
  164. 11630  LOADM SYS_PATH$+"rex\trans   .rex",TRANS
  165. 11640  'LOADM SYS_PATH$+"rex\mtrans  .rex",MTRANS
  166. 11650  LOADM SYS_PATH$+"rex\pal_chg .rex",PAL_CHG
  167. 11660  'LOADM SYS_PATH$+"rex\mreplace.rex",MREPLACE
  168. 11670  LOADM SYS_PATH$+"rex\r_erase .rex",R_ERASE
  169. 11680  LOADM SYS_PATH$+"rex\diverge .rex",DIVERGE
  170. 11690  LOADM SYS_PATH$+"rex\bit_scan.rex",BIT_SCAN
  171. 11700  'LOADM SYS_PATH$+"rex\mrefer  .rex",MREFER
  172. 11710  LOADM SYS_PATH$+"rex\lshift  .rex",LSHIFT
  173. 11720  LOADM SYS_PATH$+"rex\search  .rex",NSEARCH
  174. 11730  LOADM SYS_PATH$+"rex\tksearch.rex",TKSEARCH
  175. 11740  LOADM SYS_PATH$+"rex\cd_play .rex",CD_PLAY
  176. 11750  LOADM SYS_PATH$+"rex\snd_play.rex",SND_PLAY
  177. 11760  :
  178. 11770  GOSUB *HIGH_SCAN
  179. 11780  CALLM REPLACE,0,&H0120,&H40000,    0,255,1024*512/2/2            :'頁2画面消去
  180. 11790  CALLM REPLACE,0,&H0130,&H00000,16*16,255,8*1024/2                :'インデックス初期化
  181. 11800  CALLM REPLACE,0,&H0130,&H02000,    0,255,(16*2*256+16*16/2*896)/2:'パレット、パターン初期化
  182. 11810  CALLM SPR_OFF,255,1,SPR_QUANTITY
  183. 11820  :
  184. 11830  RESTORE 11890
  185. 11840  READ SENUM,SENAM$:IF SENUM=255 THEN 11930
  186. 11850  :
  187. 11860  LOAD@ SYS_PATH$+"snd\"+SENAM$+".snd",SEBUF
  188. 11870  CALLM TRANS,255,&H0014,VARPTR(SEBUF(0)),&H0014,VARPTR(SE(0))+20000*(SENUM-1),20000/4,4
  189. 11880  GOTO 11840
  190. 11890  DATA  1,stair   , 5,switch1 , 7,switch3 , 9,lock1
  191. 11900  DATA 19,nakigoe6
  192. 11910  DATA 23,nakigoeC,25,slice1
  193. 11920  DATA 30,warn4   ,255,end
  194. 11930  :
  195. 11940  DIM RAIN_STATUS(EFCT_QUANTITY-1)
  196. 11950  DIM RAIN_X(EFCT_QUANTITY-1),RAIN_Y(EFCT_QUANTITY-1)
  197. 11960  :
  198. 11970  'DIM SNOW_RAD(EFCT_QUANTITY-1),SIN_BUF(89)
  199. 11980  'DIM SNOW_STATUS(EFCT_QUANTITY-1)
  200. 11990  'DIM AXIS(EFCT_QUANTITY-1),SNOW_Y(EFCT_QUANTITY-1)
  201. 12000  :
  202. 12010  'DIM ERASE_PTR%(369-1)
  203. 12020  'LOAD@ "h:\s_star\dat\erase_pt.dat",ERASE_PTR%
  204. 12030  :
  205. 12040  :
  206. 12050 FOR I=0 TO 255:MEM$(I)="----------------":ICM$(I)="----------------":NEXT
  207. 12060 :
  208. 12070 :
  209. 12080 MEM$(  0)="未登録     ":MEM$(  1)="先頭のメンバー名"
  210. 12090 MEM$( 32)="男       ":MEM$( 33)="女       "
  211. 12100 MEM$( 34)="老人      ":MEM$( 35)="老女      "
  212. 12110 MEM$( 36)="少年      ":MEM$( 37)="少女      "
  213. 12120 MEM$( 38)="男の子     ":MEM$( 39)="女の子     "
  214. 12130 MEM$( 40)="妙な生き物   "
  215. 12140 MEM$( 64)="情報欄     ":MEM$( 65)="石板      "
  216. 12150 :
  217. 12160 :
  218. 12170 FRONT=0:BACK=0:F_OVER=0:B_OVER=0:MCHR=640:MPOSXMAX=9:MPOSYMAX=9
  219. 12180 FCOL =0:FTYPE=0:F_SW=1:B_SW=1:E_PAGE_MAX=1:S_PAGE_MAX=2:動画単位=1:TST=0
  220. 12190 MES_SP=2
  221. 12200 M_LARGE=256:M_LARGE$="256":MXMAX_10=1:MXMAX_1=6:MYMAX_10=1:MYMAX_1=6
  222. 12210 F_NUM$(0)="000":F_NUM$(1)="000":F_NUM=0:P_NUM=0:FILENAME$(0)="parts":FILENAME$(1)="seria":'mb2
  223. 12220 EFCT$(0)="晴天":EFCT$(1)="雨天":EFCT$(2)="降雪"
  224. 12230 EFCT$(3)="濃霧":EFCT$(4)="減色":EFCT$(5)="照明"
  225. 12240 :
  226. 12250 :
  227. 12260 LOAD@ DAT_PATH$+"parts000.bga",BG_BUF%
  228. 12270 LOAD@ DAT_PATH$+"parts000.ptn",PTN_BUF%
  229. 12280 LOAD@ DAT_PATH$+"parts000.pal",PAL_BUF%
  230. 12290 LOAD@ DAT_PATH$+"parts000.col",COL_BUF%
  231. 12300 LOAD@ DAT_PATH$+"map000  .hed",HEADER%
  232. 12310 LOAD@ DAT_PATH$+"map000  .frn",M_FRONT%
  233. 12320 LOAD@ DAT_PATH$+"map000  .bac",M_BACK%
  234. 12330 LOAD@ DAT_PATH$+"map000  .jdg",JUDGE%
  235. 12340 LOAD@ DAT_PATH$+"map000  .tlk",MES_DATA
  236. 12350 'CALLM TRANS,255,&H0014,VARPTR(COL_BUF%(0)),&H0130,&H2000,32*256/4,4
  237. 12360 'CALLM TRANS,255,&H0014,VARPTR(PTN_BUF%(0)),&H0130,&H4000,16*16/2*896/4,4
  238. 12370 FOR I=0 TO 895:PAL_NO%(I)=PEEK(VARPTR(PAL_BUF%(0))+I):NEXT
  239. 12380 :
  240. 12390 *SCROLL
  241. 12400  EFCT_FLG=1
  242. 12410  CALLM CHR_OFF,255,0,657,0
  243. 12420  FOR I=353 TO 353+3:CALLM CHR_DEF,255,I,240,240,MCHR+4,PAL_NO%(MCHR),1:NEXT
  244. 12430  FOR I=56 TO 63:CALLM CHR_DEF,255,I,16*7,16*7,64,0,0:NEXT
  245. 12440  :
  246. 12450  'POKE BASE_ADD+34,MAPX*15,2:POKE BASE_ADD+36,MAPY*15,2:'編集用cx_l,cy_y設定
  247. 12460  :
  248. 12470  'TEST_MODE=MB2
  249. 12480  'IF TEST_MODE=0 THEN LINE(16,16)-(255,255),PRESET,,BF ELSE LINE(0,0)-(1023,511),PRESET,,BF:'OUT &HFDA0,&H0F
  250. 12490  TST=1:GOSUB *BASE_SET
  251. 12500  :
  252. 12510  PALETTE 4,[ 50, 50, 50]:PALETTE 5,[100,100,100]:PALETTE 6,[150,150,150] :'窓用パレット設定
  253. 12520  PALETTE 8,[  0,  0,  0]
  254. 12530  :
  255. 12540  IF JUDGE_MODE=1 THEN CALLM MCHR_PAL,255,0,PAL_NO%(MCHR),PAL_NO%(MCHR)
  256. 12550  LF_SUB=JUDGE%(SMX,SMY)
  257. 12560  IF LF_SUB>=&H10 AND LF_SUB=<&H1C THEN WTR_FLG=1 ELSE WTR_FLG=0
  258. 12570  IF LF_SUB =&H1D THEN WTR_FLG=2
  259. 12580  CPU=INP(&H5EC):CWAIT=INP(&H5E2)
  260. 12590  'CALLM ERASER,1,VARPTR(ERASE_PTR%(0))
  261. 12600  :
  262. 12610  'CALLM MAP_PUT,255,BG_STACK(10)+1,BG_STACK(12)+1,MPOSXMAX,MPOSYMAX,F_OVER,B_OVER,VARPTR(M_FRONT%(0,0)),VARPTR(M_BACK%(0,0)),VARPTR(PAL_NO%(0)),1,1,240,240
  263. 12620  'CALLM R_ERASE,255,1,VARPTR(E2_PTN%(0))
  264. 12630  :
  265. 12640  'CALLM PAL_CHG,255,4,0,255,31,1,1,0,0,0,VARPTR(COL_BUF%(0)) : 'フェードイン
  266. 12650  'CALLM PAL_CHG,255,6, 1,32,0,0,0,0,VARPTR(COL_BUF%(0)) : '白黒にする
  267. 12660  'CALLM PAL_CHG,255,1, 1,12,0,1,0,1,VARPTR(COL_BUF%(0)) : 'セピア色にする
  268. 12670  'CALLM PAL_CHG,255,1, 1, 4,0,0,1,1,VARPTR(COL_BUF%(0)) : '回想色にする
  269. 12680  :
  270. 12690  WHILE PAD(1)=0 AND PTRIG(1)=0
  271. 12700   CALLM BG_ROLL,255,0,0,MCHR+MCPTN(PD),PAL_NO%(MCHR),BG_BUF,STACK,ANIME_QUANTITY
  272. 12710   ON EFCT GOSUB *雨天,*降雪,*濃霧,*減色,*照明
  273. 12720  WEND
  274. 12730  :
  275. 12740  PD=PAD(1):PG=PTRIG(1)
  276. 12750  IF PD<>0 THEN GOSUB *MOVE_JUDGE:GOTO 12690
  277. 12760  IF PG=1 THEN GOSUB *CWINDOW:GOSUB *PAD_WAIT:GOTO 12690
  278. 12770  WHILE PTRIG(1)<>0:GOSUB *BG_ANIME:WEND
  279. 12780  :
  280. 12790  GOTO 12690
  281. 12800  :
  282. 12810  :
  283. 12820  *CWINDOW :'0
  284. 12830   :
  285. 12840   IF MNAME_FLG=1 THEN GOSUB *MAPNAME_ERASE
  286. 12850   CW_NO=0:TALK_FLG=1
  287. 12860   CW_X1(0)=2:CW_Y1(0)=2:CW_X2(0)=8:CW_Y2(0)=11:CW_OFS(0)=0:CW_SW(0)=1:GOSUB *CWIN_SUB
  288. 12870   SYMBOL(16*3,16*(3+1)+16*CY(0)-2),"▽",1,1,%15,1
  289. 12880   FX=3:FY= 3:MES$="  魔法 ":FCOL=6:GOSUB *PRINT
  290. 12890   FX=3:FY= 4:MES$="  道具 ":FCOL=6:GOSUB *PRINT
  291. 12900   FX=3:FY= 5:MES$="  装備 ":FCOL=6:GOSUB *PRINT
  292. 12910   FX=3:FY= 6:MES$="  状態 ":FCOL=6:GOSUB *PRINT
  293. 12920   FX=3:FY= 7:MES$="  作戦 ":FCOL=6:GOSUB *PRINT
  294. 12930   FX=3:FY= 8:MES$="  捜索 ":FCOL=6:GOSUB *PRINT
  295. 12940   FX=3:FY= 9:MES$="  地図 ":FCOL=6:GOSUB *PRINT
  296. 12950   FX=3:FY=10:MES$="  その他":GOSUB *PRINT
  297. 12960   IF CW_MODE=1 THEN *CW8
  298. 12970   :
  299. 12980   GOSUB *CWIN_INPUT
  300. 12990   IF PG=2 THEN CW_SW(0)=0:GOSUB *CWIN_SUB:TALK_FLG=0:RETURN
  301. 13000   ON CY+1 GOSUB *DUM_RET,*DUM_RET,*DUM_RET,*DUM_RET,*DUM_RET,*DUM_RET,*DUM_RET,*CW8:CW_NO=0
  302. 13010   GOTO 12980
  303. 13020   :
  304. 13030   *CW8 :'112
  305. 13040    CW_NO=112:CW_X1(112)=10:CW_Y1(112)=2:CW_X2(112)=17:CW_Y2(112)=9
  306. 13050    CW_OFS(112)=7*10:CW_SW(112)=1:GOSUB *CWIN_SUB
  307. 13060    SYMBOL(16*11,16*(3+1)+16*CY(112)-2),"▽",1,1,%15,1
  308. 13070    FX=11:FY=3:MES$="  書き込み":FCOL=6:GOSUB *PRINT
  309. 13080    FX=11:FY=4:MES$="  読み込み":FCOL=6:GOSUB *PRINT
  310. 13090    FX=11:FY=5:MES$="  戦闘設定":FCOL=6:GOSUB *PRINT
  311. 13100    FX=11:FY=6:MES$="  演奏設定":GOSUB *CD_INFORMATION:IF CDI%(5)= 0 THEN FCOL=6:GOSUB *PRINT ELSE GOSUB *PRINT
  312. 13110    FX=11:FY=7:MES$="  動作設定":FCOL=6:GOSUB *PRINT
  313. 13120    FX=11:FY=8:MES$="  内部設定":FCOL=6:GOSUB *PRINT
  314. 13130    IF CW_MODE=1 THEN *CW8_5
  315. 13140    :
  316. 13150    GOSUB *CWIN_INPUT
  317. 13160    IF PG=2 THEN CW_SW(112)=0:GOSUB *CWIN_SUB:RETURN
  318. 13170    ON CY+1 GOSUB *DUM_RET,*DUM_RET,*DUM_RET,*CW8_4,*DUM_RET,*DUM_RET:CW_NO=112
  319. 13180    GOTO 13150
  320. 13190    *BASE_SET
  321. 13200     WTR_FLG=0:'水面フラグの解除
  322. 13210     BASE_ADD =VARPTR(STBASE(0)):HEAD_ADD=VARPTR(HEADER%(0))
  323. 13220     CD_ADD   =BASE_ADD+384:FLG_ADD=BASE_ADD+1024:'POKE FLG_ADD,0,4:'一時使用フラグ初期化
  324. 13230     MWARP_ADD=HEAD_ADD+256
  325. 13240     PLAYTIME3=PEEK(BASE_ADD+48,2):PLAYTIME2=PEEK(BASE_ADD+50):PLAYTIME1=PEEK(BASE_ADD+51)
  326. 13250     DS_ADD   =BASE_ADD+896
  327. 13260     SCAN_FLG =PEEK(DS_ADD+0):GOSUB *MODE_CHANGE
  328. 13270     SC_STEP2 =PEEK(DS_ADD+1)        :SC_STEP=2^(SC_STEP2+1):W_TYPE=PEEK(DS_ADD+2)
  329. 13280     SQ       =PEEK(DS_ADD+3)        :'SPR_QUANTITY=SQ(SQ):CALLM SPR_OFF,255,1,SPR_QUANTITY
  330. 13290     MQ       =PEEK(DS_ADD+4)        :CS    =PEEK(DS_ADD+5)
  331. 13300     F_OVER   =PEEK(BASE_ADD+38,2 )  :B_OVER=PEEK(BASE_ADD+40,2)
  332. 13310     ANIME_QUANTITY=PEEK(BASE_ADD+42):EFCT  =PEEK(BASE_ADD+43  )
  333. 13320     CDKIND   =PEEK(BASE_ADD+44   )  :CDNO  =PEEK(BASE_ADD+45  )
  334. 13330     VOLUME=  PEEK(CD_ADD+128*CDNO+1):TRACK =PEEK(CD_ADD+128*CDNO+4*CDKIND)
  335. 13340     MCHR     =PEEK(BASE_ADD+64,2)   :PD_SUB=PEEK(BASE_ADD+66  )
  336. 13350     CALLM TRANS,255,&H0014,VARPTR(W_TILE_BUF(0))+16*16/2*W_TYPE,&H0014,VARPTR(W_TILE%(0)),16*16/2/4,4
  337. 13360     :
  338. 13370     CALLM TRANS,255,&H0014,VARPTR(COL_BUF%(0)),&H0130,&H2000,2*16*256/4,4   :'パレット初期化
  339. 13380     CALLM TRANS,255,&H0014,VARPTR(PTN_BUF%(0)),&H0130,&H4000,16*16/2*896/4,4:'パターン初期化
  340. 13390     :
  341. 13400     IF EFCT=3 THEN PALETTE 7,[80,80,80] ELSE PALETTE 7,[0,0,0]
  342. 13410     ON EFCT+1 GOSUB *EFCT_INIT,*RAIN_INIT,*SNOW_INIT,*MIST_INIT,*HFCOL_INIT,*HFCOL_INIT
  343. 13420     GOSUB *LUS_CHR_MAKE :'波うち用キャラを作成
  344. 13430     FOR I=0 TO 3:CALLM CHR_DEF,255,353+I,16*16,16*16,MCHR+MCPTN(PD_SUB),PAL_NO%(MCHR),1:NEXT
  345. 13440     :
  346. 13450     CODE_U=16:CODE_D=15:CODE_L=16:CODE_R=15
  347. 13460     Y_U=496:Y_D=240:X_L=496:X_R=240
  348. 13470     CX_BASE=PEEK(BASE_ADD+34,2):IF CX_BASE>=32768 THEN CX_BASE=CX_BASE-65536
  349. 13480     CY_BASE=PEEK(BASE_ADD+36,2):IF CY_BASE>=32768 THEN CY_BASE=CY_BASE-65536
  350. 13490     CX_L =CX_BASE-1:CX_R=CX_BASE+15:SMX=CX_BASE+7:SMX_ADD=VARPTR(SMX)
  351. 13500     CY_U =CY_BASE-1:CY_D=CY_BASE+15:SMY=CY_BASE+7:SMY_ADD=VARPTR(SMY)
  352. 13510     IF SMX>=0 AND SMY>=0 THEN
  353. 13520      LF=JUDGE%(SMX,SMY):IF LF=7 THEN LF_FLG=1 ELSE LF_FLG=0
  354. 13530     ENDIF
  355. 13540     SMXMAX=MPOSXMAX*15+14:SMYMAX=MPOSYMAX*15+14:PD=5
  356. 13550     BG_BUF=VARPTR(BG_BUF%(0)):STACK=VARPTR(STACK%(0)):BG_STACK=VARPTR(BG_STACK(0))
  357. 13560     :
  358. 13570     BG_STACK( 0)=SMXMAX+1             :BG_STACK( 1)=SMYMAX+1
  359. 13580     BG_STACK( 2)=VARPTR(M_FRONT%(0,0)):BG_STACK( 3)=VARPTR(M_BACK%(0,0))
  360. 13590     BG_STACK( 5)=VARPTR(PAL_NO%(0))   :BG_STACK( 6)=CODE_U
  361. 13600     BG_STACK( 7)=CODE_D               :BG_STACK( 8)=CODE_L:BG_STACK( 9)=CODE_R
  362. 13610     BG_STACK(10)=  CX_L               :BG_STACK(11)=  CX_R:BG_STACK(12)=  CY_U
  363. 13620     BG_STACK(13)=  CY_D               :BG_STACK(14)=F_OVER:BG_STACK(15)=B_OVER
  364. 13630     :
  365. 13640     CALLM MAP_PUT,255,BG_STACK(10)+1,BG_STACK(12)+1,MPOSXMAX,MPOSYMAX,F_OVER,B_OVER,VARPTR(M_FRONT%(0,0)),VARPTR(M_BACK%(0,0)),VARPTR(PAL_NO%(0)),1,1,240,240
  366. 13650     CALLM R_ERASE,255,1,VARPTR(E2_PTN%(0))
  367. 13660     GOSUB *CD_PLAYER:CALLM CHR_OFF,255,0,EFCT_QUANTITY-1,1
  368. 13670     TIME$="00:00:00"
  369. 13680     RETURN
  370. 13690   *CW8_4 :'116
  371. 13700    GOSUB *CD_INFORMATION:IF CDI%(5)=0 THEN RETURN
  372. 13710    GOSUB *CD_STATUS     :IF CDS%(1)=0 THEN GOSUB *CD_PLAYER
  373. 13720    CW_NO=116:CW_X1(116)=19:CW_Y1(116)=2:CW_X2(116)=39:CW_Y2(116)=22
  374. 13730    CW_OFS(116)=7*10+8*8:CW_SW(116)=1:GOSUB *CWIN_SUB
  375. 13740    :
  376. 13750    FX=22:FY=3:MES$="曲情報番号"+RIGHT$(STR$(CDNO+1),2)+"   音声出力"
  377. 13760               MES$=MES$+RIGHT$(STR$(FIX(100-(VOLUME+32)/63*100)+50),2)+"%"
  378. 13770    GOSUB *PRINT
  379. 13780    FOR I=1 TO 15
  380. 13790     FX=22:FY=4+I
  381. 13800     MES$=KLEFT$(MUSNAME$(I),4)+" "+RIGHT$(STR$(PEEK(CD_ADD+128*CDNO+4*I)),2)+"   "+KLEFT$(MUSNAME$(I+15),4)+" "+RIGHT$(STR$(PEEK(CD_ADD+128*CDNO+4*I+60)),2)
  382. 13810     GOSUB *PRINT
  383. 13820    NEXT
  384. 13830    FX=22:FY=21:MES$="試験曲番 "+RIGHT$(STR$(PEEK(CD_ADD+128*CDNO)),2)+"   試験演奏開始"
  385. 13840     GOSUB *PRINT
  386. 13850    IF CDKIND<>0 AND CDKIND<>31 THEN
  387. 13860      FX=21+10*FIX((CDKIND-1)/15):FY=5+(CDKIND-1) MOD 15:MES$="*":GOSUB *PRINT
  388. 13870    ENDIF
  389. 13880    SYMBOL(16*20+16*10*CX(116),16*(3+1)+16*CY(116)-2),"▽",1,1,%15,1
  390. 13890    :
  391. 13900    GOSUB *PAD_INPUT
  392. 13910    PD=PAD(1):PG=PTRIG(1)
  393. 13920    IF PD<>0 THEN
  394. 13930      PUT@A(16*20+16*10*CX(116),16*(3+1)+16*CY(116)-16)-(16*20+16*10*CX(116)+15,16*(3+1)+16*CY(116)-1),W_TILE%
  395. 13940      IF PD=1 THEN
  396. 13950        CY(116)=CY(116)-1
  397. 13960        IF CY(116)= 1 THEN CY(116)= 0
  398. 13970        IF CY(116)=17 THEN CY(116)=16
  399. 13980        IF CY(116)< 0 THEN CY(116)=18
  400. 13990      ELSE
  401. 14000        IF PD=5 THEN
  402. 14010          CY(116)=CY(116)+1
  403. 14020          IF CY(116)= 1 THEN CY(116)= 2
  404. 14030          IF CY(116)=17 THEN CY(116)=18
  405. 14040          IF CY(116)>18 THEN CY(116)= 0
  406. 14050        ELSE
  407. 14060          IF PD=3 OR PAD(1)=7 THEN
  408. 14070            CX(116)=ABS(CX(116)-1)
  409. 14080          ENDIF
  410. 14090        ENDIF
  411. 14100      ENDIF
  412. 14110      SYMBOL(16*20+16*10*CX(116),16*(3+1)+16*CY(116)-2),"▽",1,1,%15,1
  413. 14120    ENDIF
  414. 14130    IF PG=1 THEN
  415. 14140      IF CX(116)<>1 OR CY(116)<>18 THEN
  416. 14150        PUT@A(16*(22+10*CX(116)+5),16*(CY(116)+3))-(16*(22+10*CX(116)+5)+15,16*(CY(116)+3)+15),W_TILE%
  417. 14160        PUT@A(16*(22+10*CX(116)+6),16*(CY(116)+3))-(16*(22+10*CX(116)+6)+15,16*(CY(116)+3)+15),W_TILE%
  418. 14170      ENDIF
  419. 14180      IF CY(116)=0 THEN
  420. 14190        IF CX(116)=0 THEN
  421. 14200          CDNO=CDNO+1:IF CDNO=4 THEN CDNO=0
  422. 14210          POKE VARPTR(STBASE(0))+45,CDNO
  423. 14220          FX=27:FY=3:MES$=RIGHT$(STR$(CDNO+1),2):GOSUB *PRINT:GOSUB *MUSNUM_PUT
  424. 14230        ELSE
  425. 14240          VOLUME=VOLUME+1:IF VOLUME=32 THEN VOLUME=0
  426. 14250          POKE CD_ADD+128*CDNO+1,VOLUME
  427. 14260          PUT@A(16*36,16*3)-(16*36+15,16*3+15),W_TILE%
  428. 14270          FX=36:FY=3:MES$=RIGHT$(STR$(FIX(100-(VOLUME+32)/63*100)+50),2)+"%":GOSUB *PRINT
  429. 14280          OUT &H4E3,4:OUT &H4E2,63-VOLUME:OUT &H4E3,5:OUT &H4E2,63-VOLUME
  430. 14290        ENDIF
  431. 14300      ELSE
  432. 14310        IF CY(116)=18 THEN
  433. 14320          IF CX(116)=0 THEN
  434. 14330            TRACK_SUB=PEEK(CD_ADD+128*CDNO)+1
  435. 14340            IF TRACK_SUB>CDI%(5) THEN TRACK_SUB=0
  436. 14350            FX=27:FY=3+18:MES$=RIGHT$(STR$(TRACK_SUB),2):GOSUB *PRINT
  437. 14360            POKE CD_ADD+128*CDNO,TRACK_SUB
  438. 14370          ELSE
  439. 14380            TRACK=PEEK(CD_ADD+128*CDNO):GOSUB *CD_PLAYER
  440. 14390          ENDIF
  441. 14400        ELSE
  442. 14410          TRACK_SUB=PEEK(CD_ADD+128*CDNO+4*(15*CX(116)+CY(116)-1))+1
  443. 14420          IF TRACK_SUB>CDI%(5) THEN TRACK_SUB=0
  444. 14430          FX=27+10*CX(116):FY=3+CY(116):MES$=RIGHT$(STR$(TRACK_SUB),2):GOSUB *PRINT
  445. 14440          POKE CD_ADD+128*CDNO+4*(15*CX(116)+CY(116)-1),TRACK_SUB
  446. 14450        ENDIF
  447. 14460      ENDIF
  448. 14470    ENDIF
  449. 14480    IF PG=2 THEN
  450. 14490      IF TRACK<>PEEK(CD_ADD+128*CDNO+4*CDKIND) THEN TRACK=PEEK(CD_ADD+128*CDNO+4*CDKIND):GOSUB *CD_PLAYER
  451. 14500      CW_SW(116)=0:GOSUB *CWIN_SUB:RETURN
  452. 14510    ENDIF
  453. 14520    GOSUB *PAD_WAIT2
  454. 14530    GOTO 13900
  455. 14540    *MUSNUM_PUT
  456. 14550     FOR DUMY=5 TO 19
  457. 14560       FOR DUMX=0 TO 1
  458. 14570         PUT@A(16*(27+DUMX),16*DUMY)-(16*(27+DUMX)+15,16*DUMY+15),W_TILE%
  459. 14580         PUT@A(16*(37+DUMX),16*DUMY)-(16*(37+DUMX)+15,16*DUMY+15),W_TILE%
  460. 14590       NEXT
  461. 14600       FX=27:FY=DUMY:MES$=RIGHT$(STR$(PEEK(CD_ADD+128*CDNO+4*(DUMY- 4))),2):GOSUB *PRINT
  462. 14610       FX=37:FY=DUMY:MES$=RIGHT$(STR$(PEEK(CD_ADD+128*CDNO+4*(DUMY+11))),2):GOSUB *PRINT
  463. 14620     NEXT
  464. 14630     PUT@A(16*36,16*3)-(16*36+15,16*3+15),W_TILE%
  465. 14640     PUT@A(16*37,16*3)-(16*37+15,16*3+15),W_TILE%
  466. 14650     VOLUME=PEEK(CD_ADD+128*CDNO+1)
  467. 14660     FX=36:FY=   3:MES$=RIGHT$(STR$(FIX(100-(VOLUME+32)/63*100)+50),2)+"%":GOSUB *PRINT
  468. 14670     PUT@A(16*27,16*(3+18))-(16*27+15,16*(3+18)+15),W_TILE%
  469. 14680     PUT@A(16*28,16*(3+18))-(16*28+15,16*(3+18)+15),W_TILE%
  470. 14690     FX=27:FY=3+18:MES$=RIGHT$(STR$(PEEK(CD_ADD+128*CDNO)),2):GOSUB *PRINT
  471. 14700     IF TRACK<>PEEK(CD_ADD+128*CDNO+4*CDKIND) THEN TRACK=PEEK(CD_ADD+128*CDNO+4*CDKIND):GOSUB *CD_PLAYER ELSE GOSUB *CD_PLAYER_VOLUME
  472. 14710     RETURN
  473. 14720    *CD_PLAYER
  474. 14730     'INTERVAL STOP
  475. 14740     'CDINF CDI%
  476. 14750     'IF CDI%(1)=2 OR  TRACK=0 OR CDKIND=0 THEN
  477. 14760     '  CD PAUSE
  478. 14770     'ELSE
  479. 14780     '  GOSUB *CD_STATUS:IF CDS%(5)<>TRACK THEN CD PLAY TRACK
  480. 14790     'ENDIF
  481. 14800     'INTERVAL ON
  482. 14810     CALLM CD_PLAY,255,TRACK
  483. 14820     *CD_PLAYER_VOLUME
  484. 14830     OUT &H4E3,4:OUT &H4E2,63-VOLUME:OUT &H4E3,5:OUT &H4E2,63-VOLUME
  485. 14840     *CD_PLAYER_BAD_END
  486. 14850     RETURN
  487. 14860    *CD_INFORMATION
  488. 14870     CDINF CDI%:RETURN
  489. 14880     *CD_INFORMATION_BAD_END
  490. 14890     CDI%(5)=0:RETURN
  491. 14900    *CD_STATUS
  492. 14910     CDSTAT CDS%:RETURN
  493. 14920     *CD_STATUS_BAD_END
  494. 14930      CDS%(1)=0:RETURN
  495. 14940    *CD_FADEOUT
  496. 14950     INTERVAL OFF
  497. 14960     CDSTAT CDS%:IF CDS%(1)=0 THEN RETURN
  498. 14970     FOR I=63-VOLUME TO 0 STEP -4
  499. 14980       OUT &H4E3,4:OUT &H4E2,I:OUT &H4E3,5:OUT &H4E2,I
  500. 14990       GOSUB *BG_ANIME
  501. 15000     NEXT
  502. 15010     CD PAUSE
  503. 15020     *CD_FADEOUT_BAD_END
  504. 15030     RETURN
  505. 15040     :
  506. 15050     :
  507. 15060  *LUS_CHR_MAKE
  508. 15070   FOR I=0 TO 3
  509. 15080    CALLM LSHIFT,255,VARPTR(PTN_BUF%(0))+128*(MCHR+I*2),VARPTR(BG_BUF%(0))+128*16*(56+I),VARPTR(SIN_DAT(0)),16 :'波うちキャラの作成
  510. 15090   NEXT
  511. 15100   CALLM MCHR_PAL,255,1,PAL_NO%(MCHR),195 :'キャラのパレットを半減して波うち用パレットに複写
  512. 15110   CALLM TRANS,255,&H0130,&H2000+32*195,&H0014,VARPTR(COL_BUF%(0))+32*195,32/4,4 :'パレットを加工用領域に複写
  513. 15120   RETURN
  514. 15130   :
  515. 15140  *BG_ROLL
  516. 15150   CALLM BG_PUT,255,PD,BG_STACK,SMX_ADD,SMY_ADD
  517. 15160   FOR SC=0 TO 15 STEP SC_STEP
  518. 15170    IF SC MOD 8=0 THEN W_FLG=ABS(W_FLG-1)
  519. 15180    CALLM BG_ROLL,255,PD,SC_STEP,MCHR+MCPTN(PD)+W_FLG,PAL_NO%(MCHR),BG_BUF,STACK,ANIME_QUANTITY
  520. 15190    ON EFCT GOSUB *雨天,*降雪,*濃霧,*減色,*照明
  521. 15200   NEXT
  522. 15210   IF SMX>=0 AND SMX=<SMXMAX AND SMY>=0 AND SMY=<SMYMAX THEN LF_SUB=JUDGE%(SMX,SMY) ELSE LF_SUB=0
  523. 15220   IF CRS_FLG=0 THEN CALLM BIT_SET,255,0,10,10,&H14,VARPTR(LF_SUB)
  524. 15230   RETURN
  525. 15240   :
  526. 15250  *CD_REPEAT
  527. 15260   CDSTAT CDS%:IF CDS%(1)<>0 OR CDKIND=0 THEN RETURN ELSE CD PLAY TRACK
  528. 15270   IF VOL_FLG=0 THEN
  529. 15280    OUT &H4E3,4:OUT &H4E2,63-VOLUME:OUT &H4E3,5:OUT &H4E2,63-VOLUME
  530. 15290   ELSE
  531. 15300    OUT &H4E3,4:OUT &H4E2,31-VOLUME:OUT &H4E3,5:OUT &H4E2,31-VOLUME
  532. 15310   ENDIF
  533. 15320   *CD_REPEAT_BAD_END
  534. 15330   RETURN
  535. 15340   :
  536. 15350   :
  537. 15360  *MOVE_JUDGE
  538. 15370   :
  539. 15380   DUMCHR=56+FIX(MCPTN(PD)/2)+&H1000
  540. 15390   IF LF_SUB=19 OR LF_SUB=23 OR LF_SUB=27 THEN
  541. 15400    CALLM CHR_DEF,255,365,16*7,16*(7+WY)+16,DUMCHR,195,WTR_FLG
  542. 15410   ELSE
  543. 15420    CALLM CHR_DEF,255,365,16*7,16*(7+WY)+48,DUMCHR,195,WTR_FLG
  544. 15430   ENDIF
  545. 15440   :
  546. 15450   IF PD=1 THEN
  547. 15460    IF LF_SUB>=&H41 AND LF_SUB=<&H47 THEN LF=65536
  548. 15470    IF LF_SUB>=&H49 AND LF_SUB=<&H4B THEN LF=65536
  549. 15480    IF LF_SUB =&H4E                  THEN LF=65536
  550. 15490    IF LF_SUB>=&H51 AND LF_SUB=<&H55 THEN LF=65536
  551. 15500    IF LF_SUB =&H57                  THEN LF=65536
  552. 15510    IF LF_SUB>=&H59 AND LF_SUB=<&H5C THEN LF=65536
  553. 15520    IF LF_SUB>=&H5E AND LF_SUB=<&H5F THEN LF=65536
  554. 15530    IF LF_SUB>=&H61 AND LF_SUB=<&H63 THEN LF=65536
  555. 15540    IF LF_SUB>=&H65 AND LF_SUB=<&H66 THEN LF=65536
  556. 15550    IF LF_SUB>=&H69 AND LF_SUB=<&H6B THEN LF=65536
  557. 15560    IF LF_SUB =&H6D OR  LF_SUB= &H6F THEN LF=65536
  558. 15570    IF LF_SUB>=&H71 AND LF_SUB=<&H73 THEN LF=65536
  559. 15580    IF LF_SUB>=&H76 AND LF_SUB=<&H77 THEN LF=65536
  560. 15590    IF LF_SUB>=&H79 AND LF_SUB=<&H7D THEN LF=65536
  561. 15600    IF LF_SUB>=&H82 AND LF_SUB=<&H83 THEN LF=65536
  562. 15610    IF LF_SUB>=&H85 AND LF_SUB=<&H86 THEN LF=65536
  563. 15620    IF LF_SUB>=&H89 AND LF_SUB=<&H8C THEN LF=65536
  564. 15630    IF LF_SUB>=&H91 AND LF_SUB=<&H93 THEN LF=65536
  565. 15640    IF LF_SUB =&H9D OR  LF_SUB= &H9F THEN LF=65536
  566. 15650    IF LF_SUB>=&HA6 AND LF_SUB=<&HA7 THEN LF=65536
  567. 15660    IF LF_SUB =&HAF                  THEN LF=65536
  568. 15670    IF LF=65536 THEN
  569. 15680     LF=1
  570. 15690    ELSE
  571. 15700     IF SMX<0 OR SMY-1<0 OR SMX>SMXMAX OR SMY-1>SMYMAX THEN LF=0 ELSE LF=JUDGE%(SMX  ,SMY-1)
  572. 15710    ENDIF
  573. 15720   ELSE
  574. 15730    IF PD=2 THEN
  575. 15740     IF LF_SUB =&H40                  THEN LF=65536
  576. 15750     IF LF_SUB>=&H42 AND LF_SUB=<&H48 THEN LF=65536
  577. 15760     IF LF_SUB>=&H4A AND LF_SUB=<&H4B THEN LF=65536
  578. 15770     IF LF_SUB>=&H4F AND LF_SUB=<&H50 THEN LF=65536
  579. 15780     IF LF_SUB>=&H52 AND LF_SUB=<&H56 THEN LF=65536
  580. 15790     IF LF_SUB =&H58                  THEN LF=65536
  581. 15800     IF LF_SUB>=&H5A AND LF_SUB=<&H5D THEN LF=65536
  582. 15810     IF LF_SUB =&H5F                  THEN LF=65536
  583. 15820     IF LF_SUB>=&H62 AND LF_SUB=<&H64 THEN LF=65536
  584. 15830     IF LF_SUB>=&H66 AND LF_SUB=<&H68 THEN LF=65536
  585. 15840     IF LF_SUB>=&H6A AND LF_SUB=<&H6C THEN LF=65536
  586. 15850     IF LF_SUB =&H6E OR  LF_SUB= &H70 THEN LF=65536
  587. 15860     IF LF_SUB>=&H72 AND LF_SUB=<&H74 THEN LF=65536
  588. 15870     IF LF_SUB =&H77                  THEN LF=65536
  589. 15880     IF LF_SUB>=&H7A AND LF_SUB=<&H7E THEN LF=65536
  590. 15890     IF LF_SUB>=&H83 AND LF_SUB=<&H84 THEN LF=65536
  591. 15900     IF LF_SUB>=&H86 AND LF_SUB=<&H87 THEN LF=65536
  592. 15910     IF LF_SUB>=&H8A AND LF_SUB=<&H8D THEN LF=65536
  593. 15920     IF LF_SUB>=&H92 AND LF_SUB=<&H94 THEN LF=65536
  594. 15930     IF LF_SUB =&H98 OR  LF_SUB= &H9E THEN LF=65536
  595. 15940     IF LF_SUB =&HA0                  THEN LF=65536
  596. 15950     IF LF_SUB>=&HA7 AND LF_SUB=<&HA8 THEN LF=65536
  597. 15960     IF LF=65536 THEN
  598. 15970      LF=1
  599. 15980     ELSE
  600. 15990      IF SMX+1<0 OR SMY-1<0 OR SMX+1>SMXMAX OR SMY-1>SMYMAX THEN LF=0 ELSE LF=JUDGE%(SMX+1,SMY-1)
  601. 16000     ENDIF
  602. 16010    ELSE
  603. 16020     IF PD=3 THEN
  604. 16030      IF LF_SUB>=&H40 AND LF_SUB=<&H41 THEN LF=65536
  605. 16040      IF LF_SUB>=&H43 AND LF_SUB=<&H49 THEN LF=65536
  606. 16050      IF LF_SUB =&H4B OR  LF_SUB= &H4E THEN LF=65536
  607. 16060      IF LF_SUB =&H51                  THEN LF=65536
  608. 16070      IF LF_SUB>=&H53 AND LF_SUB=<&H59 THEN LF=65536
  609. 16080      IF LF_SUB>=&H5B AND LF_SUB=<&H5E THEN LF=65536
  610. 16090      IF LF_SUB =&H60                  THEN LF=65536
  611. 16100      IF LF_SUB>=&H63 AND LF_SUB=<&H65 THEN LF=65536
  612. 16110      IF LF_SUB =&H67 OR  LF_SUB= &H69 THEN LF=65536
  613. 16120      IF LF_SUB>=&H6B AND LF_SUB=<&H6D THEN LF=65536
  614. 16130      IF LF_SUB>=&H6F AND LF_SUB=<&H71 THEN LF=65536
  615. 16140      IF LF_SUB>=&H73 AND LF_SUB=<&H75 THEN LF=65536
  616. 16150      IF LF_SUB>=&H7B AND LF_SUB=<&H80 THEN LF=65536
  617. 16160      IF LF_SUB>=&H84 AND LF_SUB=<&H85 THEN LF=65536
  618. 16170      IF LF_SUB =&H87                  THEN LF=65536
  619. 16180      IF LF_SUB>=&H8B AND LF_SUB=<&H8E THEN LF=65536
  620. 16190      IF LF_SUB>=&H93 AND LF_SUB=<&H95 THEN LF=65536
  621. 16200      IF LF_SUB =&H99                  THEN LF=65536
  622. 16210      IF LF_SUB>=&H9F AND LF_SUB=<&HA1 THEN LF=65536
  623. 16220      IF LF_SUB =&HA9                  THEN LF=65536
  624. 16230      IF LF=65536 THEN
  625. 16240       LF=1
  626. 16250      ELSE
  627. 16260       IF SMX+1<0 OR SMY<0 OR SMX+1>SMXMAX OR SMY>SMYMAX THEN LF=0 ELSE LF=JUDGE%(SMX+1,SMY  )
  628. 16270      ENDIF
  629. 16280     ELSE
  630. 16290      IF PD=4 THEN
  631. 16300       IF LF_SUB>=&H40 AND LF_SUB=<&H42 THEN LF=65536
  632. 16310       IF LF_SUB>=&H44 AND LF_SUB=<&H4A THEN LF=65536
  633. 16320       IF LF_SUB>=&H4F AND LF_SUB=<&H50 THEN LF=65536
  634. 16330       IF LF_SUB =&H52                  THEN LF=65536
  635. 16340       IF LF_SUB>=&H54 AND LF_SUB=<&H57 THEN LF=65536
  636. 16350       IF LF_SUB>=&H59 AND LF_SUB=<&H5A THEN LF=65536
  637. 16360       IF LF_SUB>=&H5C AND LF_SUB=<&H61 THEN LF=65536
  638. 16370       IF LF_SUB>=&H64 AND LF_SUB=<&H66 THEN LF=65536
  639. 16380       IF LF_SUB =&H68 OR  LF_SUB= &H6A THEN LF=65536
  640. 16390       IF LF_SUB>=&H6C AND LF_SUB=<&H6E THEN LF=65536
  641. 16400       IF LF_SUB>=&H71 AND LF_SUB=<&H72 THEN LF=65536
  642. 16410       IF LF_SUB>=&H74 AND LF_SUB=<&H76 THEN LF=65536
  643. 16420       IF LF_SUB =&H78                  THEN LF=65536
  644. 16430       IF LF_SUB>=&H7C AND LF_SUB=<&H81 THEN LF=65536
  645. 16440       IF LF_SUB>=&H85 AND LF_SUB=<&H86 THEN LF=65536
  646. 16450       IF LF_SUB>=&H8C AND LF_SUB=<&H8F THEN LF=65536
  647. 16460       IF LF_SUB>=&H94 AND LF_SUB=<&H96 THEN LF=65536
  648. 16470       IF LF_SUB =&H98 OR  LF_SUB= &H9A THEN LF=65536
  649. 16480       IF LF_SUB>=&HA1 AND LF_SUB=<&HA2 THEN LF=65536
  650. 16490       IF LF_SUB =&HAA                  THEN LF=65536
  651. 16500       IF LF=65536 THEN
  652. 16510        LF=1
  653. 16520       ELSE
  654. 16530        IF SMX+1<0 OR SMY+1<0 OR SMX+1>SMXMAX OR SMY+1>SMYMAX THEN LF=0 ELSE LF=JUDGE%(SMX+1,SMY+1)
  655. 16540       ENDIF
  656. 16550      ELSE
  657. 16560       IF PD=5 THEN
  658. 16570        IF LF_SUB>=&H40 AND LF_SUB=<&H43 THEN LF=65536
  659. 16580        IF LF_SUB>=&H45 AND LF_SUB=<&H47 THEN LF=65536
  660. 16590        IF LF_SUB>=&H49 AND LF_SUB=<&H4B THEN LF=65536
  661. 16600        IF LF_SUB =&H4E                  THEN LF=65536
  662. 16610        IF LF_SUB>=&H50 AND LF_SUB=<&H51 THEN LF=65536
  663. 16620        IF LF_SUB =&H53                  THEN LF=65536
  664. 16630        IF LF_SUB>=&H55 AND LF_SUB=<&H58 THEN LF=65536
  665. 16640        IF LF_SUB>=&H5A AND LF_SUB=<&H5B THEN LF=65536
  666. 16650        IF LF_SUB>=&H5D AND LF_SUB=<&H5F THEN LF=65536
  667. 16660        IF LF_SUB>=&H61 AND LF_SUB=<&H62 THEN LF=65536
  668. 16670        IF LF_SUB>=&H65 AND LF_SUB=<&H67 THEN LF=65536
  669. 16680        IF LF_SUB =&H69 OR  LF_SUB= &H6B THEN LF=65536
  670. 16690        IF LF_SUB>=&H6D AND LF_SUB=<&H6F THEN LF=65536
  671. 16700        IF LF_SUB>=&H72 AND LF_SUB=<&H73 THEN LF=65536
  672. 16710        IF LF_SUB>=&H75 AND LF_SUB=<&H79 THEN LF=65536
  673. 16720        IF LF_SUB>=&H7D AND LF_SUB=<&H7F THEN LF=65536
  674. 16730        IF LF_SUB>=&H81 AND LF_SUB=<&H82 THEN LF=65536
  675. 16740        IF LF_SUB>=&H86 AND LF_SUB=<&H88 THEN LF=65536
  676. 16750        IF LF_SUB>=&H8D AND LF_SUB=<&H8F THEN LF=65536
  677. 16760        IF LF_SUB>=&H95 AND LF_SUB=<&H97 THEN LF=65536
  678. 16770        IF LF_SUB =&H99 OR  LF_SUB= &H9B THEN LF=65536
  679. 16780        IF LF_SUB>=&HA2 AND LF_SUB=<&HA3 THEN LF=65536
  680. 16790        IF LF_SUB =&HAB                  THEN LF=65536
  681. 16800        IF LF=65536 THEN
  682. 16810         LF=1
  683. 16820        ELSE
  684. 16830         IF SMX<0 OR SMY+1<0 OR SMX>SMXMAX OR SMY+1>SMYMAX THEN LF=0 ELSE LF=JUDGE%(SMX  ,SMY+1)
  685. 16840        ENDIF
  686. 16850       ELSE
  687. 16860        IF PD=6 THEN
  688. 16870         IF LF_SUB>=&H40 AND LF_SUB=<&H44 THEN LF=65536
  689. 16880         IF LF_SUB>=&H46 AND LF_SUB=<&H48 THEN LF=65536
  690. 16890         IF LF_SUB>=&H4A AND LF_SUB=<&H4B THEN LF=65536
  691. 16900         IF LF_SUB>=&H4F AND LF_SUB=<&H52 THEN LF=65536
  692. 16910         IF LF_SUB =&H54                  THEN LF=65536
  693. 16920         IF LF_SUB>=&H56 AND LF_SUB=<&H59 THEN LF=65536
  694. 16930         IF LF_SUB>=&H5B AND LF_SUB=<&H5C THEN LF=65536
  695. 16940         IF LF_SUB>=&H5E AND LF_SUB=<&H60 THEN LF=65536
  696. 16950         IF LF_SUB>=&H62 AND LF_SUB=<&H63 THEN LF=65536
  697. 16960         IF LF_SUB>=&H66 AND LF_SUB=<&H68 THEN LF=65536
  698. 16970         IF LF_SUB =&H6A OR  LF_SUB= &H6C THEN LF=65536
  699. 16980         IF LF_SUB>=&H6E AND LF_SUB=<&H70 THEN LF=65536
  700. 16990         IF LF_SUB>=&H73 AND LF_SUB=<&H74 THEN LF=65536
  701. 17000         IF LF_SUB>=&H76 AND LF_SUB=<&H7A THEN LF=65536
  702. 17010         IF LF_SUB>=&H7E AND LF_SUB=<&H80 THEN LF=65536
  703. 17020         IF LF_SUB>=&H82 AND LF_SUB=<&H83 THEN LF=65536
  704. 17030         IF LF_SUB>=&H87 AND LF_SUB=<&H89 THEN LF=65536
  705. 17040         IF LF_SUB>=&H8E AND LF_SUB=<&H90 THEN LF=65536
  706. 17050         IF LF_SUB>=&H96 AND LF_SUB=<&H97 THEN LF=65536
  707. 17060         IF LF_SUB =&H9A OR  LF_SUB= &H9C THEN LF=65536
  708. 17070         IF LF_SUB>=&HA3 AND LF_SUB=<&HA4 THEN LF=65536
  709. 17080         IF LF_SUB =&HAC                  THEN LF=65536
  710. 17090         IF LF=65536 THEN
  711. 17100          LF=1
  712. 17110         ELSE
  713. 17120          IF SMX-1<0 OR SMY+1<0 OR SMX-1>SMXMAX OR SMY+1>SMYMAX THEN LF=0 ELSE LF=JUDGE%(SMX-1,SMY+1)
  714. 17130         ENDIF
  715. 17140        ELSE
  716. 17150         IF PD=7 THEN
  717. 17160          IF LF_SUB>=&H40 AND LF_SUB=<&H45 THEN LF=65536
  718. 17170          IF LF_SUB>=&H47 AND LF_SUB=<&H49 THEN LF=65536
  719. 17180          IF LF_SUB =&H4B OR  LF_SUB= &H4E THEN LF=65536
  720. 17190          IF LF_SUB>=&H50 AND LF_SUB=<&H53 THEN LF=65536
  721. 17200          IF LF_SUB =&H55                  THEN LF=65536
  722. 17210          IF LF_SUB>=&H57 AND LF_SUB=<&H5A THEN LF=65536
  723. 17220          IF LF_SUB>=&H5C AND LF_SUB=<&H5D THEN LF=65536
  724. 17230          IF LF_SUB>=&H5F AND LF_SUB=<&H61 THEN LF=65536
  725. 17240          IF LF_SUB>=&H63 AND LF_SUB=<&H64 THEN LF=65536
  726. 17250          IF LF_SUB>=&H67 AND LF_SUB=<&H69 THEN LF=65536
  727. 17260          IF LF_SUB =&H6B OR  LF_SUB= &H6D THEN LF=65536
  728. 17270          IF LF_SUB>=&H6F AND LF_SUB=<&H71 THEN LF=65536
  729. 17280          IF LF_SUB>=&H74 AND LF_SUB=<&H75 THEN LF=65536
  730. 17290          IF LF_SUB>=&H77 AND LF_SUB=<&H7B THEN LF=65536
  731. 17300          IF LF_SUB>=&H7F AND LF_SUB=<&H81 THEN LF=65536
  732. 17310          IF LF_SUB>=&H83 AND LF_SUB=<&H84 THEN LF=65536
  733. 17320          IF LF_SUB>=&H88 AND LF_SUB=<&H8A THEN LF=65536
  734. 17330          IF LF_SUB>=&H8F AND LF_SUB=<&H91 THEN LF=65536
  735. 17340          IF LF_SUB =&H97                  THEN LF=65536
  736. 17350          IF LF_SUB =&H9B OR  LF_SUB= &H9D THEN LF=65536
  737. 17360          IF LF_SUB>=&HA4 AND LF_SUB=<&HA5 THEN LF=65536
  738. 17370          IF LF_SUB =&HAD                  THEN LF=65536
  739. 17380          IF LF=65536 THEN
  740. 17390           LF=1
  741. 17400          ELSE
  742. 17410           IF SMX-1<0 OR SMY<0 OR SMX-1>SMXMAX OR SMY>SMYMAX THEN LF=0 ELSE LF=JUDGE%(SMX-1,SMY  )
  743. 17420          ENDIF
  744. 17430         ELSE
  745. 17440          IF PD=8 THEN
  746. 17450           IF LF_SUB>=&H40 AND LF_SUB=<&H46 THEN LF=65536
  747. 17460           IF LF_SUB>=&H48 AND LF_SUB=<&H4A THEN LF=65536
  748. 17470           IF LF_SUB>=&H4F AND LF_SUB=<&H54 THEN LF=65536
  749. 17480           IF LF_SUB =&H56                  THEN LF=65536
  750. 17490           IF LF_SUB>=&H58 AND LF_SUB=<&H5B THEN LF=65536
  751. 17500           IF LF_SUB>=&H5D AND LF_SUB=<&H5E THEN LF=65536
  752. 17510           IF LF_SUB>=&H60 AND LF_SUB=<&H62 THEN LF=65536
  753. 17520           IF LF_SUB>=&H64 AND LF_SUB=<&H65 THEN LF=65536
  754. 17530           IF LF_SUB>=&H68 AND LF_SUB=<&H6A THEN LF=65536
  755. 17540           IF LF_SUB =&H6C OR  LF_SUB= &H6E THEN LF=65536
  756. 17550           IF LF_SUB>=&H70 AND LF_SUB=<&H72 THEN LF=65536
  757. 17560           IF LF_SUB>=&H75 AND LF_SUB=<&H76 THEN LF=65536
  758. 17570           IF LF_SUB>=&H78 AND LF_SUB=<&H7C THEN LF=65536
  759. 17580           IF LF_SUB>=&H81 AND LF_SUB=<&H82 THEN LF=65536
  760. 17590           IF LF_SUB>=&H84 AND LF_SUB=<&H85 THEN LF=65536
  761. 17600           IF LF_SUB>=&H88 AND LF_SUB=<&H8B THEN LF=65536
  762. 17610           IF LF_SUB>=&H90 AND LF_SUB=<&H92 THEN LF=65536
  763. 17620           IF LF_SUB =&H9C OR  LF_SUB= &H9E THEN LF=65536
  764. 17630           IF LF_SUB>=&HA5 AND LF_SUB=<&HA6 THEN LF=65536
  765. 17640           IF LF_SUB =&HAE                  THEN LF=65536
  766. 17650           IF LF=65536 THEN
  767. 17660            LF=1
  768. 17670           ELSE
  769. 17680            IF SMX-1<0 OR SMY-1<0 OR SMX-1>SMXMAX OR SMY-1>SMYMAX THEN LF=0 ELSE LF=JUDGE%(SMX-1,SMY-1)
  770. 17690           ENDIF
  771. 17700          ENDIF
  772. 17710         ENDIF
  773. 17720        ENDIF
  774. 17730       ENDIF
  775. 17740      ENDIF
  776. 17750     ENDIF
  777. 17760    ENDIF
  778. 17770   ENDIF
  779. 17780   PD_SUB=PD
  780. 17790   :
  781. 17800   IF JUDGE_MODE=1 THEN *BG_ROLL '当たり判定無視
  782. 17810   :
  783. 17820   IF CRS_FLG=1 THEN '立体交差終了判定
  784. 17830    IF LF<&H400 THEN
  785. 17840     IF LF=&H007 THEN *立体交差終了 ELSE LF=1
  786. 17850    ELSE
  787. 17860     GOTO *BG_ROLL
  788. 17870    ENDIF
  789. 17880   ELSE
  790. 17890    IF LF_SUB<>&H007 THEN CALLM BIT_SET,255,0,10,10,&H14,VARPTR(LF)
  791. 17900   ENDIF
  792. 17910   :
  793. 17920   :
  794. 17930   DUMCHR=56+FIX(MCPTN(PD)/2)
  795. 17940   IF WTR_FLG=2 THEN '水面処理判定
  796. 17950    IF LF<>0 AND LF<>1 THEN LF=&H1D:LF_SUB=LF :'水中の一方通行であればフラグの初期化を回避する
  797. 17960    CALLM CHR_DEF,255,353,16*7,16*7,DUMCHR,195,1
  798. 17970   ELSE
  799. 17980    IF WTR_FLG=1 THEN
  800. 17990     CALLM CHR_DEF,255,363,65536,65536,DUMCHR+&H1000,195,65536
  801. 18000     IF LF<>0 AND LF<>&H13 AND LF<>&H17 AND LF<>&H1B AND LF=&H1C AND LF_SUB>=&H40 AND LF_SUB=<&HBF THEN LF_SUB=&H1C :'水中の一方通行であればフラグの初期化を回避する
  802. 18010    ENDIF
  803. 18020    CALLM CHR_DEF,255,353,16*7,16*7,MCHR+MCPTN(PD),PAL_NO%(MCHR),1
  804. 18030   ENDIF
  805. 18040   :
  806. 18050   :
  807. 18060   IF WTR_FLG=0 THEN
  808. 18070    CALLM CHR_OFF,255,56,63,0:CALLM CHR_OFF,255,353+8,353+15,0 :'水面効果キャラを消去
  809. 18080   ENDIF
  810. 18090   :
  811. 18100   IF LF=1 THEN *BG_ANIME:'障害物判定
  812. 18110   :
  813. 18120   IF LF_SUB=&H10 OR LF_SUB=&H12 OR LF_SUB=&H14 OR LF_SUB=&H16 OR LF_SUB=&H18 OR LF_SUB=&H1A THEN IF PD=4 OR PD=6 THEN *BG_ANIME :'水面から斜め下へ移動しようとしたときは移動を却下
  814. 18130   IF WTR_FLG=1 OR WTR_FLG=2 THEN
  815. 18140    IF LF>31 OR LF<16 THEN
  816. 18150     IF LF<&H40 OR LF>&HBF THEN WTR_FLG=0 :'水中の一方通行だったらフラグの初期化を回避する
  817. 18160    ENDIF
  818. 18170    IF WTR_FLG=0 THEN
  819. 18180     ON LF_SUB-15 GOTO *L_SIDE_L,*L_UPPER,*L_SIDE_R,*L_DUM,*L_SIDE_L,*L_UPPER,*L_SIDE_R,*L_DUM,*L_SIDE_L,*L_UPPER,*L_SIDE_R,*L_DUM,*W_IN1,*W_IN2
  820. 18190     GOSUB *ERR_SOUND:GOTO *L_DUM
  821. 18200     *L_SIDE_L
  822. 18210      'IF PD=6 THEN WX(0)=-1:WY(0)=3:WX(1)=-1:WY(1)=4:WX(2)=-1:WY(2)=4:GOTO *LAND_SUB:'1,2
  823. 18220      IF PD=7 THEN WX(0)=-1:WY(0)=3:WX(1)=-1:WY(1)=3:WX(2)=-1:WY(2)=3:GOTO *LAND_SUB:'1
  824. 18230      IF PD=8 THEN WX(0)=-1:WY(0)=2:WX(1)=-1:WY(1)=3:WX(2)= 0:WY(2)=2:GOTO *LAND_SUB:'1,2,3
  825. 18240     *L_UPPER
  826. 18250      IF PD=1 THEN WX(0)= 0:WY(0)=2:WX(1)= 0:WY(1)=2:WX(2)= 0:WY(2)=2:GOTO *LAND_SUB:'1
  827. 18260      IF PD=2 THEN WX(0)= 0:WY(0)=2:WX(1)= 1:WY(1)=2:WX(2)= 1:WY(2)=2:GOTO *LAND_SUB:'1,2
  828. 18270      IF PD=8 THEN WX(0)= 0:WY(0)=2:WX(1)=-1:WY(1)=2:WX(2)=-1:WY(2)=2:GOTO *LAND_SUB:'1,2
  829. 18280      GOSUB *ERR_SOUND:GOTO 18480
  830. 18290     *L_SIDE_R
  831. 18300      IF PD=2 THEN WX(0)= 0:WY(0)=2:WX(1)= 1:WY(1)=2:WX(2)= 1:WY(2)=3:GOTO *LAND_SUB:'1,2,3
  832. 18310      IF PD=3 THEN WX(0)= 1:WY(0)=3:WX(1)= 1:WY(1)=3:WX(2)= 1:WY(2)=3:GOTO *LAND_SUB:'1
  833. 18320      'IF PD=4 THEN WX(0)= 1:WY(0)=3:WX(1)= 1:WY(1)=4:WX(2)= 1:WY(2)=4:GOTO *LAND_SUB:'1,2
  834. 18330      GOTO *L_UPPER
  835. 18340      *LAND_SUB
  836. 18350       CALLM CHR_DEF,255,363,16*7,16*7,64,0,0 :'倍速キャラの消去
  837. 18360       FOR I=0 TO 2
  838. 18370        M1=M_FRONT%(SMX+WX(I),SMY+WY(I)+WY):M3=M_BACK%(SMX+WX(I),SMY+WY(I)+WY)
  839. 18380        M2=M1:CALLM BIT_SET,255,0,12,14,&H14,VARPTR(M2):M2=PAL_NO%(M2)
  840. 18390        M4=M3:CALLM BIT_SET,255,0,12,14,&H14,VARPTR(M4):M4=PAL_NO%(M4)
  841. 18400        CALLM CHR_DEF,255,61-I*2,16*(7+WX(I)),16*(7+WY(I)+WY),M1,M2,1
  842. 18410        CALLM CHR_DEF,255,62-I*2,16*(7+WX(I)),16*(7+WY(I)+WY),M3,M4,1
  843. 18420       NEXT
  844. 18430      *L_DUM
  845. 18440    ENDIF
  846. 18450   ENDIF
  847. 18460   :
  848. 18470   IF LF>=&H400 AND LF_SUB=&H007 THEN *CROSS_WALKING :'立体交差処理
  849. 18480   IF LF>=&H008 AND LF=<&H00F THEN *DOOR_OPEN        :'扉処理
  850. 18490   IF LF>=&H010 AND LF=<&H01F THEN *WATER_WALKING    :'水面処理
  851. 18500   IF LF>=&H100 AND LF=<&H1FF THEN *AUTO_WALKING     :'強制移動処理
  852. 18510   IF LF>=&H200 AND LF=<&H2FF THEN *TALK             :'会話処理
  853. 18520   IF LF>=&H300 AND LF=<&H37F THEN *IN_OUT           :'地図切り換え処理
  854. 18530   :
  855. 18540   GOSUB *BG_ROLL
  856. 18550   RETURN
  857. 18560   :
  858. 18570   :
  859. 18580  *CROSS_WALKING
  860. 18590   CRS_FLG=1
  861. 18600   FOR I=0 TO 8
  862. 18610    IF SMX+PX(I)<0 OR SMX+PX(I)>SMXMAX OR SMY+PY(I)<0 OR SMY+PY(I)>SMYMAX THEN 18680
  863. 18620    IF JUDGE%(SMX+PX(I),SMY+PY(I))<&H400 THEN 18680
  864. 18630    M1=M_FRONT%(SMX+PX(I),SMY+PY(I)):M3=M_BACK%(SMX+PX(I),SMY+PY(I))
  865. 18640    M2=M1:CALLM BIT_SET,255,0,12,14,&H14,VARPTR(M2):M2=PAL_NO%(M2)
  866. 18650    M4=M3:CALLM BIT_SET,255,0,12,14,&H14,VARPTR(M4):M4=PAL_NO%(M4)
  867. 18660    CALLM CHR_DEF,255,61-I*2,16*(7+PX(I)),16*(7+PY(I)),M1,M2,1
  868. 18670    CALLM CHR_DEF,255,62-I*2,16*(7+PX(I)),16*(7+PY(I)),M3,M4,1
  869. 18680   NEXT
  870. 18690   GOSUB *BG_ROLL
  871. 18700   CALLM TRANS,255,&H14,VARPTR(NUL_DAT%(0)),&H130,&H4000+MCHR*128,128*8/4,4 '主キャラ消去
  872. 18710   CALLM CHR_OFF,255,45,62,0
  873. 18720   RETURN
  874. 18730   *立体交差終了
  875. 18740    CRS_FLG=0
  876. 18750    FOR I=0 TO 8
  877. 18760     IF SMX+PX(I)<0 OR SMX+PX(I)>SMXMAX OR SMY+PY(I)<0 OR SMY+PY(I)>SMYMAX THEN 18830
  878. 18770     IF JUDGE%(SMX+PX(I),SMY+PY(I))<&H400 THEN 18830
  879. 18780     M1=M_FRONT%(SMX+PX(I),SMY+PY(I)):M3=M_BACK%(SMX+PX(I),SMY+PY(I))
  880. 18790     M2=M1:CALLM BIT_SET,255,0,12,14,&H14,VARPTR(M2):M2=PAL_NO%(M2)
  881. 18800     M4=M3:CALLM BIT_SET,255,0,12,14,&H14,VARPTR(M4):M4=PAL_NO%(M4)
  882. 18810     CALLM CHR_DEF,255,61-I*2,16*(7+PX(I)),16*(7+PY(I)),M1,M2,1
  883. 18820     CALLM CHR_DEF,255,62-I*2,16*(7+PX(I)),16*(7+PY(I)),M3,M4,1
  884. 18830    NEXT
  885. 18840    CALLM TRANS,255,&H14,VARPTR(PTN_BUF%(MCHR*64)),&H130,&H4000+MCHR*128,128*8/4,4 '主キャラ復活
  886. 18850    GOSUB *BG_ROLL
  887. 18860    CALLM CHR_OFF,255,45,62,0
  888. 18870    RETURN
  889. 18880    :
  890. 18890  *DOOR_OPEN
  891. 18900   IF PD=2 THEN
  892. 18910    IF JUDGE%(SMX,SMY-1)<8 OR JUDGE%(SMX,SMY-1)>11 THEN PD=3:GOSUB *BG_ROLL:PD=1 ELSE PD=1
  893. 18920   ENDIF
  894. 18930   IF PD=4 THEN
  895. 18940    IF JUDGE%(SMX,SMY+1)<8 OR JUDGE%(SMX,SMY+1)>11 THEN PD=3:GOSUB *BG_ROLL:PD=5 ELSE PD=5
  896. 18950   ENDIF
  897. 18960   IF PD=6 THEN
  898. 18970    IF JUDGE%(SMX,SMY+1)<8 OR JUDGE%(SMX,SMY+1)>11 THEN PD=7:GOSUB *BG_ROLL:PD=5 ELSE PD=5
  899. 18980   ENDIF
  900. 18990   IF PD=8 THEN
  901. 19000    IF JUDGE%(SMX,SMY-1)<8 OR JUDGE%(SMX,SMY-1)>11 THEN PD=7:GOSUB *BG_ROLL:PD=1 ELSE PD=1
  902. 19010   ENDIF
  903. 19020   IF PD=1 THEN CALLM CHR_DEF,255,353,112,112,MCHR+MCPTN(PD),PAL_NO%(MCHR),1
  904. 19030   IF PD=5 THEN GOSUB *BG_ROLL
  905. 19040   ON LF-7 GOSUB *DOOR1,*DOOR2,*DOOR3,*DOOR4
  906. 19050   IF SMX>=0 AND SMY>=0 AND SMX=<SMXMAX AND SMY=<SMYMAX THEN LF=JUDGE%(SMX,SMY) ELSE LF=0
  907. 19060   RETURN
  908. 19070   :
  909. 19080   *DOOR1
  910. 19090    CALLM SND_PLAY,255,2,64,64,VARPTR(DOOR1_A%(0)):FOR K=1 TO 16:GOSUB *DOOR1_SUB:NEXT:CALLM SND_PLAY,255,2,64,64,VARPTR(DOOR1_B%(0))
  911. 19100    SWAP AT_STEP,SC_STEP
  912. 19110    IF PD=1 THEN SC_STEP=2:GOSUB *BG_ROLL:GOSUB *BG_ROLL
  913. 19120    IF PD=5 THEN SC_STEP=1:GOSUB *BG_ROLL
  914. 19130    SWAP AT_STEP,SC_STEP
  915. 19140    CALLM SND_PLAY,255,2,64,64,VARPTR(DOOR1_A%(0)):FOR K=15 TO 0 STEP -1:GOSUB *DOOR1_SUB:NEXT:CALLM SND_PLAY,255,2,64,64,VARPTR(DOOR1_B%(0))
  916. 19150    RETURN
  917. 19160    :
  918. 19170    *DOOR1_SUB
  919. 19180     PUT@A(768-K, 0)-(768-K+15,15),PTN_BUF%,,,,,64*705
  920. 19190     PUT@A(784+K, 0)-(784+K+15,15),PTN_BUF%,,,,,64*706
  921. 19200     PUT@A(768-K,16)-(768-K+15,31),PTN_BUF%,,,,,64*721
  922. 19210     PUT@A(784+K,16)-(784+K+15,31),PTN_BUF%,,,,,64*722
  923. 19220     PUT@A(768-K,32)-(768-K+15,47),PTN_BUF%,,,,,64*737
  924. 19230     PUT@A(784+K,32)-(784+K+15,47),PTN_BUF%,,,,,64*738
  925. 19240     GOSUB *DOOR_DEFINE
  926. 19250     RETURN
  927. 19260     :
  928. 19270   *DOOR2
  929. 19280    PUT@A(768, 0)-(783,15),PTN_BUF%,,,,,64*709
  930. 19290    PUT@A(784, 0)-(799,15),PTN_BUF%,,,,,64*710
  931. 19300    PUT@A(768,16)-(783,31),PTN_BUF%,,,,,64*725
  932. 19310    PUT@A(784,16)-(799,31),PTN_BUF%,,,,,64*726
  933. 19320    PUT@A(768,32)-(783,47),PTN_BUF%,,,,,64*741
  934. 19330    PUT@A(784,32)-(799,47),PTN_BUF%,,,,,64*742
  935. 19340    GET@A(768,0)-(799,47),DOOR%
  936. 19350    CALLM SND_PLAY,255,2,64,64,VARPTR(DOOR2_A%(0)):FOR K=1 TO 16:GOSUB *DOOR2_SUB:NEXT:CALLM SND_PLAY,255,2,64,64,VARPTR(DOOR2_B%(0))
  937. 19360    SWAP AT_STEP,SC_STEP
  938. 19370    IF PD=1 THEN SC_STEP=2:GOSUB *BG_ROLL:GOSUB *BG_ROLL
  939. 19380    IF PD=5 THEN SC_STEP=1:GOSUB *BG_ROLL
  940. 19390    SWAP AT_STEP,SC_STEP
  941. 19400    CALLM SND_PLAY,255,2,64,64,VARPTR(DOOR2_A%(0)):FOR K=15 TO 0 STEP -1:GOSUB *DOOR2_SUB:NEXT:CALLM SND_PLAY,255,2,64,64,VARPTR(DOOR2_B%(0))
  942. 19410    RETURN
  943. 19420    :
  944. 19430    *DOOR2_SUB
  945. 19440     PUT@A(768+K*2,0)-(799+K*2,47),DOOR%
  946. 19450     PUT@A(784+K, 0)-(799+K,15),PTN_BUF%,,,,,64*710
  947. 19460     PUT@A(784+K,16)-(799+K,31),PTN_BUF%,,,,,64*726
  948. 19470     PUT@A(784+K,32)-(799+K,47),PTN_BUF%,,,,,64*742
  949. 19480     GOSUB *DOOR_DEFINE
  950. 19490     RETURN
  951. 19500     :
  952. 19510   *DOOR3
  953. 19520    PUT@A(768, 0)-(783,15),PTN_BUF%,,,,,64*713
  954. 19530    PUT@A(784, 0)-(799,15),PTN_BUF%,,,,,64*714
  955. 19540    PUT@A(768,16)-(783,31),PTN_BUF%,,,,,64*729
  956. 19550    PUT@A(784,16)-(799,31),PTN_BUF%,,,,,64*730
  957. 19560    PUT@A(768,32)-(783,47),PTN_BUF%,,,,,64*745
  958. 19570    PUT@A(784,32)-(799,47),PTN_BUF%,,,,,64*746
  959. 19580    GET@A(768,0)-(799,47),DOOR%
  960. 19590    CALLM SND_PLAY,255,2,64,64,VARPTR(DOOR3_A%(0))
  961. 19600    FOR K=1 TO 48:GOSUB *DOOR3_SUB:NEXT
  962. 19610    CALLM SND_PLAY,255,2,64,64,VARPTR(DOOR3_B%(0))
  963. 19620    SWAP AT_STEP,SC_STEP
  964. 19630    IF PD=1 THEN SC_STEP=2:GOSUB *BG_ROLL:GOSUB *BG_ROLL
  965. 19640    IF PD=5 THEN SC_STEP=1:GOSUB *BG_ROLL
  966. 19650    SWAP AT_STEP,SC_STEP
  967. 19660    CALLM SND_PLAY,255,2,64,64,VARPTR(DOOR3_A%(0))
  968. 19670    FOR K=47 TO 0 STEP -1:GOSUB *DOOR3_SUB:NEXT
  969. 19680    CALLM SND_PLAY,255,2,64,64,VARPTR(DOOR3_C%(0))
  970. 19690    RETURN
  971. 19700    :
  972. 19710    *DOOR3_SUB
  973. 19720     PUT@A(768,-K)-(799,47-K),DOOR%
  974. 19730     GOSUB *DOOR_DEFINE
  975. 19740     RETURN
  976. 19750     :
  977. 19760   *DOOR4
  978. 19770    PUT@A(768, 0)-(783,15),PTN_BUF%,,,,,64*717
  979. 19780    PUT@A(784, 0)-(799,15),PTN_BUF%,,,,,64*718
  980. 19790    PUT@A(768,16)-(783,31),PTN_BUF%,,,,,64*733
  981. 19800    PUT@A(784,16)-(799,31),PTN_BUF%,,,,,64*734
  982. 19810    PUT@A(768,32)-(783,47),PTN_BUF%,,,,,64*749
  983. 19820    PUT@A(784,32)-(799,47),PTN_BUF%,,,,,64*750
  984. 19830    GET@A(768,0)-(799,47),DOOR%
  985. 19840    'CALLM SND_PLAY,255,2,64,64,VARPTR(DOOR4_A%(0)):WHILE PLAY(2)=-1:GOSUB *BG_ANIME:WEND
  986. 19850    CALLM SND_PLAY,255,2,64,64,VARPTR(DOOR4_B%(0))
  987. 19860    FOR K!=1 TO 0 STEP -.1!:GOSUB *DOOR4_SUB:NEXT
  988. 19870    PLAY OFF
  989. 19880    SWAP AT_STEP,SC_STEP
  990. 19890    IF PD=1 THEN SC_STEP=2:GOSUB *BG_ROLL:GOSUB *BG_ROLL
  991. 19900    IF PD=5 THEN SC_STEP=1:GOSUB *BG_ROLL
  992. 19910    SWAP AT_STEP,SC_STEP
  993. 19920    CALLM SND_PLAY,255,2,64,64,VARPTR(DOOR4_B%(0))
  994. 19930    FOR K!=0 TO 1 STEP .1!:GOSUB *DOOR4_SUB:NEXT
  995. 19940    'CALLM SND_PLAY,255,2,64,64,VARPTR(DOOR4_C%(0))
  996. 19950    :
  997. 19960    *DOOR4_SUB
  998. 19970     PUT@A(768,0)-(799,47),DOOR%,,K!
  999. 19980     GOSUB *DOOR_DEFINE
  1000. 19990     RETURN
  1001. 20000     :
  1002. 20010     :
  1003. 20020     *DOOR_DEFINE
  1004. 20030      GET@A(768, 0)-(783,15),DOOR1%:GET@A(784, 0)-(799,15),DOOR2%
  1005. 20040      GET@A(768,16)-(783,31),DOOR3%:GET@A(784,16)-(799,31),DOOR4%
  1006. 20050      GET@A(768,32)-(783,47),DOOR5%:GET@A(784,32)-(799,47),DOOR6%
  1007. 20060      :
  1008. 20070      CALLM TRANS,255,&H14,VARPTR(DOOR1%(0)),&H130,&H4000+128*(705+4*(LF-8)),128/4,4
  1009. 20080      CALLM TRANS,255,&H14,VARPTR(DOOR2%(0)),&H130,&H4000+128*(706+4*(LF-8)),128/4,4
  1010. 20090      CALLM TRANS,255,&H14,VARPTR(DOOR3%(0)),&H130,&H4000+128*(721+4*(LF-8)),128/4,4
  1011. 20100      CALLM TRANS,255,&H14,VARPTR(DOOR4%(0)),&H130,&H4000+128*(722+4*(LF-8)),128/4,4
  1012. 20110      CALLM TRANS,255,&H14,VARPTR(DOOR5%(0)),&H130,&H4000+128*(737+4*(LF-8)),128/4,4
  1013. 20120      CALLM TRANS,255,&H14,VARPTR(DOOR6%(0)),&H130,&H4000+128*(738+4*(LF-8)),128/4,4
  1014. 20130      GOSUB *BG_ANIME:LINE(752,0)-(847,47),PRESET,,BF
  1015. 20140      RETURN
  1016. 20150      :
  1017. 20160      :
  1018. 20170 *WATER_WALKING
  1019. 20180  WY=(FIX(LF/4)-4)*2
  1020. 20190  IF LF=&H11 OR LF=&H15 OR LF=&H19 THEN IF PD=2 OR PD=8 THEN *BG_ANIME :'水面から斜め上へ遠ざかろうとしたときは移動を却下
  1021. 20200  IF LF_SUB=19 OR LF_SUB=23 OR LF_SUB=27 THEN IF LF<>28 AND LF<>29 THEN *W_NEAR
  1022. 20210  IF WTR_FLG=1 THEN IF LF<>19 AND LF<>23 AND LF<>27 AND LF<>28 AND LF<>29 THEN *W_UPPER
  1023. 20220  :
  1024. 20230  IF LF_SUB=&H11 OR LF_SUB=&H15 OR LF_SUB=&H19 THEN IF PD=4 OR PD=6 THEN *BG_ANIME :'水面へ斜め下へ接近しようとしたときは移動を却下
  1025. 20240  IF LF=&H1D THEN WTR_FLG=2 ELSE WTR_FLG=1
  1026. 20250  ON LF-15 GOTO *W_SIDE_L,*W_UPPER,*W_SIDE_R,*W_NEAR,*W_SIDE_L,*W_UPPER,*W_SIDE_R,*W_NEAR,*W_SIDE_L,*W_UPPER,*W_SIDE_R,*W_NEAR,*W_IN1,*W_IN2
  1027. 20260  RETURN
  1028. 20270  *W_UPPER
  1029. 20280   IF PD=4 THEN WX(0)= 0:WY(0)=3:WX(1)=1:WY(1)=3:WX(2)=1:WY(2)=3:GOSUB *WATER_SUB:RETURN:'1,2
  1030. 20290   IF PD=5 THEN WX(0)= 0:WY(0)=3:WX(1)=0:WY(1)=3:WX(2)=0:WY(2)=3:GOSUB *WATER_SUB:RETURN:'1
  1031. 20300   IF PD=6 THEN WX(0)=-1:WY(0)=3:WX(1)=0:WY(1)=3:WX(2)=0:WY(2)=3:GOSUB *WATER_SUB:RETURN:'1,2
  1032. 20310   WX(0)=0:WY(0)=1:WX(1)=0:WY(1)=1:WX(2)=0:WY(2)=1:GOSUB *WATER_SUB:RETURN
  1033. 20320  *W_SIDE_R
  1034. 20330   IF PD=4 THEN WX(0)= 0:WY(0)=3:WX(1)=1:WY(1)=3:WX(2)=1:WY(2)=3:GOSUB *WATER_SUB:RETURN:'1,2
  1035. 20340   IF PD=5 THEN WX(0)= 0:WY(0)=3:WX(1)=0:WY(1)=3:WX(2)=0:WY(2)=3:GOSUB *WATER_SUB:RETURN:'1
  1036. 20350   IF PD=6 THEN WX(0)=-1:WY(0)=3:WX(1)=0:WY(1)=3:WX(2)=0:WY(2)=4:GOSUB *WATER_SUB:RETURN:'1,2,3
  1037. 20360   IF PD=7 THEN WX(0)= 0:WY(0)=3:WX(1)=0:WY(1)=3:WX(2)=0:WY(2)=3:GOSUB *WATER_SUB:RETURN:'1
  1038. 20370   IF PD=8 THEN WX(0)= 0:WY(0)=2:WX(1)=0:WY(1)=3:WX(2)=0:WY(2)=3:GOSUB *WATER_SUB:RETURN:'1,2
  1039. 20380   GOSUB *ERR_SOUND:RETURN
  1040. 20390  *W_SIDE_L
  1041. 20400   IF PD=2 THEN WX(0)= 0:WY(0)=2:WX(1)=0:WY(1)=3:WX(2)=0:WY(2)=3:GOSUB *WATER_SUB:RETURN:'1,2
  1042. 20410   IF PD=3 THEN WX(0)= 0:WY(0)=3:WX(1)=0:WY(1)=3:WX(2)=0:WY(2)=3:GOSUB *WATER_SUB:RETURN:'1
  1043. 20420   IF PD=4 THEN WX(0)= 0:WY(0)=3:WX(1)=0:WY(1)=4:WX(2)=1:WY(2)=3:GOSUB *WATER_SUB:RETURN:'1,2,3
  1044. 20430   IF PD=5 THEN WX(0)= 0:WY(0)=3:WX(1)=0:WY(1)=3:WX(2)=0:WY(2)=3:GOSUB *WATER_SUB:RETURN:'1
  1045. 20440   IF PD=6 THEN WX(0)=-1:WY(0)=3:WX(1)=0:WY(1)=3:WX(2)=2:WY(2)=1:GOSUB *WATER_SUB:RETURN:'1,2
  1046. 20450   GOSUB *ERR_SOUND:RETURN
  1047. 20460   *WATER_SUB
  1048. 20470    CALLM CHR_OFF,255,363,363,0 :'倍速キャラの消去
  1049. 20480    M1=56+FIX(MCPTN(PD))/2+&H1000:M2=195
  1050. 20490    CALLM CHR_DEF,255,365,16*7,16*(7+WY)+48,M1,M2,1
  1051. 20500    FOR I=0 TO 2
  1052. 20510     M1=M_FRONT%(SMX+WX(I),SMY+WY(I)+WY):M3=M_BACK%(SMX+WX(I),SMY+WY(I)+WY)
  1053. 20520     M2=M1:CALLM BIT_SET,255,0,12,14,&H14,VARPTR(M2):M2=PAL_NO%(M2)
  1054. 20530     M4=M3:CALLM BIT_SET,255,0,12,14,&H14,VARPTR(M4):M4=PAL_NO%(M4)
  1055. 20540     CALLM CHR_DEF,255,61-I*2,16*(7+WX(I)),16*(7+WY(I)+WY),M1,M2,1
  1056. 20550     CALLM CHR_DEF,255,62-I*2,16*(7+WX(I)),16*(7+WY(I)+WY),M3,M4,1
  1057. 20560    NEXT
  1058. 20570    GOTO *BG_ROLL
  1059. 20580    :
  1060. 20590  *W_NEAR
  1061. 20600   IF LF_SUB=28 THEN *W_IN1
  1062. 20610   CALLM CHR_OFF,255, 56, 63,0 :'最前画面の消去
  1063. 20620   CALLM CHR_OFF,255,365,365,0 :'非移動キャラの消去
  1064. 20630   IF PD=1 OR PD=2 OR PD=8 THEN WY(0)=(FIX(LF_SUB/4)-4)*2 ELSE WY(0)=WY
  1065. 20640   IF PD=3 OR PD=7 THEN
  1066. 20650    IF LF_SUB=19 OR LF_SUB=23 OR LF_SUB=27 THEN
  1067. 20660     M1=56+FIX(MCPTN(PD))/2+&H1000:M2=195
  1068. 20670     M4=M4+1:CALLM CHR_DEF,255,363,16*7,16*(7+WY)+16,M1,M2,1
  1069. 20680     GOTO *BG_ROLL
  1070. 20690    ENDIF
  1071. 20700   ENDIF
  1072. 20710   IF PD=1 OR PD=2 OR PD=8 THEN M3=16 ELSE M3=48
  1073. 20720   M1=56+FIX(MCPTN(PD))/2+&H1000:M2=195
  1074. 20730   CALLM CHR_DEF,255,363,16*7,16*(7+WY(0))+M3,M1,M2,1
  1075. 20740   GOTO *BG_ROLL
  1076. 20750   :
  1077. 20760  *W_IN1
  1078. 20770   IF LF_SUB=28 AND LF=28 THEN
  1079. 20780    CALLM BG_PUT,255,PD,BG_STACK,SMX_ADD,SMY_ADD
  1080. 20790    FOR SC=0 TO 15 STEP SC_STEP
  1081. 20800     CALLM BG_ROLL,255,PD,SC_STEP,64,PAL_NO%(60),BG_BUF,STACK,ANIME_QUANTITY
  1082. 20810     ON EFCT GOSUB *雨天,*降雪,*濃霧,*減色,*照明
  1083. 20820    NEXT
  1084. 20830    LF_SUB=JUDGE%(SMX,SMY):RETURN
  1085. 20840   ENDIF
  1086. 20850   CALLM CHR_OFF,255,365,365,0                     :'非移動キャラの消去
  1087. 20860   CALLM CHR_DEF,255,366,16*7,16*7,60,PAL_NO%(60),1:'一時使用の泡の表示
  1088. 20870   IF LF=28 THEN
  1089. 20880    M1=56+FIX(MCPTN(PD)/2)+&H1000:M2=195
  1090. 20890    CALLM CHR_DEF,255,363,16*7,16*7+16,M1,M2,1 :'水面の表示(倍速)
  1091. 20900    M1=M_BACK%(SMX,SMY):M2=M1:CALLM BIT_SET,255,0,12,14,&H14,VARPTR(M2):M2=PAL_NO%(M2)
  1092. 20910    CALLM CHR_DEF,255,361,16*7,16*7   ,M1,M2,1 :'BGの表示(等速)
  1093. 20920    IF PD=4 THEN
  1094. 20930     M1=M_BACK%(SMX+1,SMY):M2=M1:CALLM BIT_SET,255,0,12,14,&H14,VARPTR(M2):M2=PAL_NO%(M2)
  1095. 20940     CALLM CHR_DEF,255,362,16*7+16,16*7   ,M1,M2,1 :'BGの表示(等速)
  1096. 20950    ELSE
  1097. 20960     IF PD=6 THEN
  1098. 20970      M1=M_BACK%(SMX-1,SMY):M2=M1:CALLM BIT_SET,255,0,12,14,&H14,VARPTR(M2):M2=PAL_NO%(M2)
  1099. 20980      CALLM CHR_DEF,255,362,16*7-16,16*7   ,M1,M2,1 :'BGの表示(等速)
  1100. 20990     ENDIF
  1101. 21000    ENDIF
  1102. 21010    M1=VARPTR(NUL_DAT%(0)):M2=&H4000+(MCHR+MCPTN(PD))*128+128
  1103. 21020    M3=MCHR+MCPTN(PD):M4=PAL_NO%(MCHR)
  1104. 21030    M5= SC_STEP
  1105. 21040   ELSE
  1106. 21050    CALLM CHR_OFF,255, 63, 63,0                :'最前面の泡の消去
  1107. 21060    M1=56+FIX(MCPTN(PD)/2)+&H1000:M2=195
  1108. 21070    CALLM CHR_DEF,255,363,16*7,16*7-16,M1,M2,1 :'水面の表示(倍速)
  1109. 21080    M1=M_BACK%(SMX,SMY-1):M2=M1:CALLM BIT_SET,255,0,12,14,&H14,VARPTR(M2):M2=PAL_NO%(M2)
  1110. 21090    CALLM CHR_DEF,255,361,16*7,16*7-16,M1,M2,1 :'BGの表示(等速)
  1111. 21100    IF PD=2 THEN
  1112. 21110     M1=M_BACK%(SMX+1,SMY-1):M2=M1:CALLM BIT_SET,255,0,12,14,&H14,VARPTR(M2):M2=PAL_NO%(M2)
  1113. 21120     CALLM CHR_DEF,255,362,16*7+16,16*7-16,M1,M2,1 :'BGの表示(等速)
  1114. 21130    ELSE
  1115. 21140     IF PD=8 THEN
  1116. 21150      M1=M_BACK%(SMX-1,SMY-1):M2=M1:CALLM BIT_SET,255,0,12,14,&H14,VARPTR(M2):M2=PAL_NO%(M2)
  1117. 21160      CALLM CHR_DEF,255,362,16*7-16,16*7-16,M1,M2,1 :'BGの表示(等速)
  1118. 21170     ENDIF
  1119. 21180    ENDIF
  1120. 21190    M3=MCHR+MCPTN(PD):M4=PAL_NO%(MCHR)
  1121. 21200    M1=VARPTR(PTN_BUF%(0))+M3*128:M2=&H4000+M3*128-8*SC_STEP
  1122. 21210    M5=-SC_STEP
  1123. 21220   ENDIF
  1124. 21230   :
  1125. 21240   CALLM BG_PUT,255,PD,BG_STACK,SMX_ADD,SMY_ADD
  1126. 21250   FOR SC=0 TO 15 STEP SC_STEP
  1127. 21260    IF SC MOD 8=0 THEN W_FLG=ABS(W_FLG-1)
  1128. 21270    CALLM BG_ROLL,255,PD,SC_STEP,M3+W_FLG,M4,BG_BUF,STACK,ANIME_QUANTITY
  1129. 21280    ON EFCT GOSUB *雨天,*降雪,*濃霧,*減色,*照明
  1130. 21290    DUM=8*FIX(SC_STEP/4)
  1131. 21300    M2=M2-8*M5:CALLM TRANS,255,&H14,M1    ,&H130,M2    ,DUM,4
  1132. 21310               CALLM TRANS,255,&H14,M1+128,&H130,M2+128,DUM,4:M1=M1+8*SC_STEP
  1133. 21320   NEXT
  1134. 21330   IF LF<>28 THEN
  1135. 21340    CALLM TRANS,255,&H14,VARPTR(PTN_BUF%(MCHR*64)),&H130,&H4000+MCHR*128,128*8/4,4'主キャラ復活
  1136. 21350    DUMCHR=56+MCPTN(PD)/2+&H1000
  1137. 21360    CALLM CHR_DEF,255,365,16*7,16*7+16,DUMCHR,195,1 :'写り込み表示
  1138. 21370   ELSE
  1139. 21380    CALLM TRANS,255,&H14,VARPTR(NUL_DAT%(0)),&H130,&H4000+MCHR*128,128*8/4,4'主キャラ消去
  1140. 21390    CALLM CHR_DEF,255, 63,16*7,16*7,60,PAL_NO%(60),1 :'最前面の泡の表示
  1141. 21400   ENDIF
  1142. 21410   CALLM CHR_OFF,255,366,366,0:'一時使用の泡の消去
  1143. 21420   CALLM CHR_OFF,255,361,363,0           :'BG及び水面の消去
  1144. 21430   LF_SUB=JUDGE%(SMX,SMY):RETURN
  1145. 21440    :
  1146. 21450  *W_IN2
  1147. 21460   DUMCHR=56+MCPTN(PD)/2
  1148. 21470   IF LF_SUB=29 AND LF=29 THEN
  1149. 21480    CALLM BG_PUT,255,PD,BG_STACK,SMX_ADD,SMY_ADD
  1150. 21490    FOR SC=0 TO 15 STEP SC_STEP
  1151. 21500     CALLM BG_ROLL,255,PD,SC_STEP,DUMCHR,195,BG_BUF,STACK,ANIME_QUANTITY
  1152. 21510     ON EFCT GOSUB *雨天,*降雪,*濃霧,*減色,*照明
  1153. 21520    NEXT
  1154. 21530    LF_SUB=JUDGE%(SMX,SMY):RETURN
  1155. 21540   ENDIF
  1156. 21550   CALLM CHR_DEF,255,365,16*7,16*7,DUMCHR,195,1 :'水面の表示(非移動)
  1157. 21560   IF LF=29 THEN
  1158. 21570    M1=M_BACK%(SMX,SMY):M2=M1:CALLM BIT_SET,255,0,12,14,&H14,VARPTR(M2):M2=PAL_NO%(M2)
  1159. 21580    CALLM CHR_DEF,255,361,16*7   ,16*7   ,M1,M2,1 :'現在地  のBGを表示(等速)
  1160. 21590    IF PD=4 THEN
  1161. 21600     M1=M_BACK%(SMX+1,SMY):M2=M1:CALLM BIT_SET,255,0,12,14,&H14,VARPTR(M2):M2=PAL_NO%(M2)
  1162. 21610     CALLM CHR_DEF,255,362,16*7+16,16*7   ,M1,M2,1 :'現在地+1のBGを表示(等速)
  1163. 21620    ELSE
  1164. 21630     IF PD=6 THEN
  1165. 21640      M1=M_BACK%(SMX-1,SMY):M2=M1:CALLM BIT_SET,255,0,12,14,&H14,VARPTR(M2):M2=PAL_NO%(M2)
  1166. 21650      CALLM CHR_DEF,255,362,16*7-16,16*7   ,M1,M2,1 :'現在地-1のBGを表示(等速)
  1167. 21660     ENDIF
  1168. 21670    ENDIF
  1169. 21680    M1=VARPTR(NUL_DAT%(0)):M2=&H4000+(MCHR+MCPTN(PD))*128+128
  1170. 21690    M3=MCHR+MCPTN(PD):M4=PAL_NO%(MCHR)
  1171. 21700    M5= SC_STEP
  1172. 21710   ELSE
  1173. 21720    M1=M_BACK%(SMX,SMY-1):M2=M1:CALLM BIT_SET,255,0,12,14,&H14,VARPTR(M2):M2=PAL_NO%(M2)
  1174. 21730    CALLM CHR_DEF,255,361,16*7   ,16*7-16,M1,M2,1 :'現在地  のBGを表示(等速)
  1175. 21740    IF PD=2 THEN
  1176. 21750     M1=M_BACK%(SMX+1,SMY-1):M2=M1:CALLM BIT_SET,255,0,12,14,&H14,VARPTR(M2):M2=PAL_NO%(M2)
  1177. 21760     CALLM CHR_DEF,255,362,16*7+16,16*7-16,M1,M2,1 :'現在地+1のBGを表示(等速)
  1178. 21770    ELSE
  1179. 21780     IF PD=8 THEN
  1180. 21790      M1=M_BACK%(SMX-1,SMY-1):M2=M1:CALLM BIT_SET,255,0,12,14,&H14,VARPTR(M2):M2=PAL_NO%(M2)
  1181. 21800      CALLM CHR_DEF,255,362,16*7-16,16*7-16 ,M1,M2,1 :'現在地-1のBGを表示(等速)
  1182. 21810     ENDIF
  1183. 21820    ENDIF
  1184. 21830    M3=MCHR+MCPTN(PD):M4=PAL_NO%(MCHR)
  1185. 21840    M1=VARPTR(PTN_BUF%(0))+M3*128:M2=&H4000+M3*128-8*SC_STEP
  1186. 21850    M5=-SC_STEP
  1187. 21860   ENDIF
  1188. 21870   :
  1189. 21880   CALLM BG_PUT,255,PD,BG_STACK,SMX_ADD,SMY_ADD
  1190. 21890   FOR SC=0 TO 15 STEP SC_STEP
  1191. 21900    IF SC MOD 8=0 THEN W_FLG=ABS(W_FLG-1)
  1192. 21910    CALLM BG_ROLL,255,PD,SC_STEP,M3+W_FLG,M4,BG_BUF,STACK,ANIME_QUANTITY
  1193. 21920    ON EFCT GOSUB *雨天,*降雪,*濃霧,*減色,*照明
  1194. 21930    DUM=8*FIX(SC_STEP/4)
  1195. 21940    M2=M2-8*M5:CALLM TRANS,255,&H14,M1    ,&H130,M2    ,DUM,4
  1196. 21950               CALLM TRANS,255,&H14,M1+128,&H130,M2+128,DUM,4:M1=M1+8*SC_STEP
  1197. 21960   NEXT
  1198. 21970   IF LF<>29 AND LF<>2 THEN
  1199. 21980    CALLM TRANS,255,&H14,VARPTR(PTN_BUF%(MCHR*64)),&H130,&H4000+MCHR*128,128*8/4,4'主キャラ復活
  1200. 21990    CALLM CHR_OFF,255,365,365,0:'半透明消去
  1201. 22000   ELSE
  1202. 22010    CALLM TRANS,255,&H14,VARPTR(NUL_DAT%(0)),&H130,&H4000+MCHR*128,128*8/4,4'主キャラ消去
  1203. 22020   ENDIF
  1204. 22030   CALLM CHR_OFF,255,361,362,0 :'BG消去
  1205. 22040   LF_SUB=JUDGE%(SMX,SMY):RETURN
  1206. 22050    :
  1207. 22060    :
  1208. 22070 *AUTO_WALKING
  1209. 22080  GOSUB *BG_ROLL':AT_STEP=SC_STEP
  1210. 22090  WHILE LF=<&H1FF AND LF>=&H100 AND PTRIG(1)<>2
  1211. 22100   IF SMX>=0 AND SMY>=0 AND SMX=<SMXMAX AND SMY=<SMYMAX THEN LF=JUDGE%(SMX,SMY) ELSE LF=0
  1212. 22110   CALLM BIT_SET,255,0,10,10,&H14,VARPTR(LF)
  1213. 22120   :
  1214. 22130   IF LF>&H1FF OR LF<&H100 THEN 22230
  1215. 22140   :
  1216. 22150   IF LF>=&H180 THEN LF_OFS=&H180 ELSE LF_OFS=&H100
  1217. 22160   IF LF>=LF_OFS+&H40 THEN
  1218. 22170    IF (LF-(LF_OFS+&H44)) MOD 8=0 THEN *DIR_SEARCH ELSE *DUAL_WALK
  1219. 22180   ENDIF
  1220. 22190   IF LF>=LF_OFS+&H08 THEN AT_STEP=2^(FIX((LF-LF_OFS)/8)-1) ELSE AT_STEP=SC_STEP
  1221. 22200   PD=(LF-LF_OFS)-FIX((LF-LF_OFS)/8)*8+1
  1222. 22210   :
  1223. 22220   GOSUB *AUTO_BG_ROLL
  1224. 22230  WEND:PD=0
  1225. 22240  IF SMX>=0 AND SMY>=0 AND SMX=<SMXMAX AND SMY=<SMYMAX THEN
  1226. 22250   LF_SUB=JUDGE%(SMX,SMY):CALLM BIT_SET,255,0,10,10,&H14,VARPTR(LF_SUB)
  1227. 22260  ELSE
  1228. 22270   LF_SUB=0
  1229. 22280  ENDIF
  1230. 22290  IF PTRIG(1)=2 THEN RETURN *RETURN ELSE RETURN
  1231. 22300  :
  1232. 22310  *DIR_SEARCH
  1233. 22320   I=0:PD=PD-2:IF PD=<0 THEN PD=PD+8
  1234. 22330   IF LF>=LF_OFS+&H4C THEN AT_STEP=2^(FIX((LF-(LF_OFS+&H44))/8)-1) ELSE AT_STEP=SC_STEP
  1235. 22340   :
  1236. 22350   J=JUDGE%(SMX+PX(PD),SMY+PY(PD)):CALLM BIT_SET,255,0,10,10,&H14,VARPTR(J)
  1237. 22360   IF J>=&H100 AND J=<&H1FF THEN 22220
  1238. 22370   I=I+1:IF I=8 THEN GOSUB *ERR_SOUND:GOTO *AUTO_BG_ROLL
  1239. 22380   PD=PD+1:IF PD>8 THEN PD=PD-8
  1240. 22390   GOTO 22350
  1241. 22400   :
  1242. 22410  *DUAL_WALK
  1243. 22420   IF LF>=LF_OFS+&H48 THEN AT_STEP=2^(FIX((LF-(LF_OFS+&H40))/8)-1) ELSE AT_STEP=SC_STEP
  1244. 22430   :
  1245. 22440   I=(LF-(LF_OFS+&H40)) MOD 8 +1
  1246. 22450   IF I=1 THEN
  1247. 22460    IF PD=1 OR PD=2 OR PD=8 THEN PD=1 ELSE IF PD=4 OR PD=5 OR PD=6 THEN PD=5
  1248. 22470   ELSE
  1249. 22480    IF I=2 THEN
  1250. 22490     IF PD=1 OR PD=2 OR PD=3 THEN PD=2 ELSE IF PD=5 OR PD=6 OR PD=7 THEN PD=6
  1251. 22500    ELSE
  1252. 22510     IF I=3 THEN
  1253. 22520      IF PD=2 OR PD=3 OR PD=4 THEN PD=3 ELSE IF PD=6 OR PD=7 OR PD=8 THEN PD=7
  1254. 22530     ELSE
  1255. 22540      IF I=4 THEN
  1256. 22550       IF PD=1 OR PD=7 OR PD=8 THEN PD=8 ELSE IF PD=3 OR PD=4 OR PD=5 THEN PD=4
  1257. 22560      ENDIF
  1258. 22570     ENDIF
  1259. 22580    ENDIF
  1260. 22590   ENDIF
  1261. 22600   GOTO 22220
  1262. 22610   :
  1263. 22620  *AUTO_BG_ROLL
  1264. 22630   CALLM BG_PUT,255,PD,BG_STACK,SMX_ADD,SMY_ADD
  1265. 22640   :
  1266. 22650   FOR I=0 TO 15 STEP AT_STEP
  1267. 22660   IF LF>=&H180 THEN IF I MOD 8=0 THEN W_FLG=ABS(W_FLG-1)
  1268. 22670    CALLM BG_ROLL,255,PD,AT_STEP,MCHR+W_FLG+MCPTN(PD),PAL_NO%(MCHR),BG_BUF,STACK,ANIME_QUANTITY
  1269. 22680    ON EFCT GOSUB *雨天,*降雪,*濃霧,*減色,*照明
  1270. 22690   NEXT:RETURN
  1271. 22700   :
  1272. 22710   :
  1273. 22720 *TALK
  1274. 22730  MES_NO=LF-512:M_SPEED=0:M_TONE=0:MPOS=1
  1275. 22740  SX=4:SY=21:EX=35:EY=26:FX=SX:FY=SY:M_COL=7:M_SIZE!=1:M_FONT=0
  1276. 22750  :
  1277. 22760  IF PD=2 OR PD=4 OR PD=6 OR PD=8 THEN *BG_ANIME
  1278. 22770  :
  1279. 22780  M1=M_FRONT%(SMX+PX(PD),SMY+PY(PD)):TX=0:TY=0
  1280. 22790  IF M1>=512 AND M1=<639 THEN
  1281. 22800   M1=M1-M1 MOD 8+TKPTN(PD)
  1282. 22810   M3=M_BACK%(SMX+PX(PD),SMY+PY(PD)):M2=M1:M4=M3
  1283. 22820   CALLM BIT_SET,255,0,12,14,&H14,VARPTR(M2):CALLM BIT_SET,255,0,12,14,&H14,VARPTR(M4)
  1284. 22830   M2=PAL_NO%(M2):M4=PAL_NO%(M4)
  1285. 22840   CALLM CHR_DEF,255,62,16*(7+PX(PD)),16*(7+PY(PD)),M1,M2,1
  1286. 22850   CALLM CHR_DEF,255,63,16*(7+PX(PD)),16*(7+PY(PD)),M3,M4,1
  1287. 22860   GOSUB *BG_ANIME
  1288. 22870   IF PD=1 THEN TX=16*7:TY=16*6
  1289. 22880   IF PD=3 THEN TX=16*8:TY=16*7
  1290. 22890   IF PD=5 THEN TX=16*7:TY=16*8
  1291. 22900   IF PD=7 THEN TX=16*6:TY=16*7
  1292. 22910   PX=PX(PD):PY=PY(PD):TKPTN=M1
  1293. 22920   TKMPTN1=M_FRONT%(SMX+PX,SMY+PY):TKX=TX:TKY=TY
  1294. 22930   SMX_SUB=PX:SMY_SUB=PY
  1295. 22940  ENDIF
  1296. 22950  :
  1297. 22960  MES_ADD=VARPTR(MES_DATA(0))+MES_DATA(MES_NO)
  1298. 22970  IF MES_ADD-VARPTR(MES_DATA(0))=0 THEN RETURN
  1299. 22980  GOSUB *MES_OPEN:TALK_FLG=1
  1300. 22990  IF PEEK(MES_ADD,1)<>0 THEN
  1301. 23000   MX=INSTR(AKCNV$(MEM$(PEEK(MES_ADD,1)))," ")-1
  1302. 23010   IF MX=<0 THEN MX=32
  1303. 23020   MEM$=LEFT$(AKCNV$(MEM$(PEEK(MES_ADD,1))),MX)
  1304. 23030   SYMBOL(16*SX+X_RATIO,16*FY+Y_RATIO),MEM$+"「",1,1,%15
  1305. 23040   FX=SX+KLEN(MEM$)+1:SX=FX
  1306. 23050  ELSE
  1307. 23060   SYMBOL (16*(SX-1)+X_RATIO,16*FY+Y_RATIO),"「",1,1,%M_COL+8
  1308. 23070  ENDIF
  1309. 23080  :
  1310. 23090  M_CUT1=PEEK(MES_ADD+MPOS,1):M_CUT2=PEEK(MES_ADD+MPOS+1,1)
  1311. 23100  IF M_CUT1 =&H40 THEN GOSUB *MES_COMMAND:GOTO 23090
  1312. 23110  MES$=AKCNV$(CHR$(M_CUT1)):MPOS=MPOS+1
  1313. 23120  IF M_CUT1>=&HB0 AND M_CUT1=<&HCF AND M_CUT2>=&HDE AND M_CUT2=<&HDF THEN MES$=AKCNV$(CHR$(M_CUT1,M_CUT2)):MPOS=MPOS+1
  1314. 23130  IF M_CUT1>=&H80 AND M_CUT1=<&H9F THEN MES$=CHR$(M_CUT1,M_CUT2):MPOS=MPOS+1
  1315. 23140  SYMBOL (16*FX+X_RATIO,16*FY+Y_RATIO+(8-8*M_SIZE!)),MES$,M_SIZE!,M_SIZE!,%M_COL+8,,,M_FONT
  1316. 23150  IF M_TONE<>0 AND MES$<>"・" AND MES$<>"、" AND MES$<>"。" THEN BEEP 363523,4,M_TONE
  1317. 23160  IF MES$="、" THEN FOR I=1 TO 2+M_SPEED*2:GOSUB *BG_ANIME:NEXT
  1318. 23170  IF MES$="。" THEN FOR I=1 TO 5+M_SPEED*2:GOSUB *BG_ANIME:NEXT
  1319. 23180  FX=FX+1:IF FX>EX THEN FX=SX:FY=FY+1
  1320. 23190          IF FY>EY THEN GOSUB *MESW_CLEAR
  1321. 23200  IF FX MOD MQ=0 OR M_FONT<>0 OR M_SIZE!<>1 OR M_SPEED<>0 THEN FOR I=1 TO M_SPEED:GOSUB *BG_ANIME:NEXT
  1322. 23210  GOTO 23090
  1323. 23220  :
  1324. 23230  *MES_COMMAND
  1325. 23240   COM_NO=PEEK(MES_ADD+MPOS+1,1)
  1326. 23250     OPT1=PEEK(MES_ADD+MPOS+2,1)
  1327. 23260     OPT2=PEEK(MES_ADD+MPOS+3,1)
  1328. 23270     OPT3=PEEK(MES_ADD+MPOS+4,1)
  1329. 23280     MPOS=MPOS+5
  1330. 23290     :
  1331. 23300   IF COM_NO=253 OR COM_NO=254 OR COM_NO=255 THEN
  1332. 23310     SYMBOL(FX*16+X_RATIO,FY*16+Y_RATIO),"」",1,1,%M_COL+8
  1333. 23320     IF VOL_FLG=1 THEN GOSUB *VOLUME_REPAIR
  1334. 23330     RETURN *MES_CLOSE
  1335. 23340   ENDIF
  1336. 23350   ON COM_NO+1     GOTO *M_TARGET ,*M_MEMBER ,*M_SPEED ,*M_TONE
  1337. 23360   ON COM_NO+1-  4 GOTO *M_COLOR  ,*M_FONT   ,*M_SIZE  ,*M_BS
  1338. 23370   ON COM_NO+1-  8 GOTO *M_CR     ,*M_INPUT  ,*M_WAIT  ,*M_PLAY
  1339. 23380   ON COM_NO+1- 12 GOTO *M_SND
  1340. 23390   ON COM_NO+1- 32 GOTO *M_TKMOVE ,*M_MCMOVE ,*M_CHMOVE
  1341. 23400   ON COM_NO+1- 36 GOTO *M_MPWRITE,*M_MPERASE
  1342. 23410   ON COM_NO+1- 48 GOTO *M_DOOR
  1343. 23420   ON COM_NO-223 GOTO *M_YN_SEL ,*M_4_SEL  ,23470    ,*M_SEL_DIV
  1344. 23430   ON COM_NO-231 GOTO *M_FLG_SET,*M_FLG_RST,23470    ,*M_FLG_DIV
  1345. 23440   ON COM_NO-239 GOTO *M_LABEL  ,*M_JUMP
  1346. 23450   ON COM_NO+1-252 GOTO *M_ENDING
  1347. 23460   GOSUB *ERR_SOUND
  1348. 23470   RETURN
  1349. 23480   :
  1350. 23490   *M_TARGET :' 書式 00,メンバーの番号(1:元の会話人物に復帰)
  1351. 23500    SYMBOL(16*FX+X_RATIO,16*FY+Y_RATIO),"」",1,1,%M_COL+8
  1352. 23510    FY=FY+2
  1353. 23520    IF FY>EY THEN GOSUB *MESW_CLEAR
  1354. 23530    IF OPT1=0 THEN FX=3 ELSE FX=4
  1355. 23540    IF MEM$(OPT1)="未登録     " THEN SYMBOL(16*FX+X_RATIO,16*FY+Y_RATIO),"「",1,1,%M_COL+8:FX=FX+1:GOTO 23600
  1356. 23550    FOR I=1 TO 6
  1357. 23560     MES$=KMID$(AKCNV$(KLEFT$(MEM$(OPT1),5)+"「"),I,1)
  1358. 23570     IF MES$=" " THEN NEXT:GOTO 23600
  1359. 23580     SYMBOL(16*FX+X_RATIO,16*FY+Y_RATIO),MES$,1,1,%M_COL+8
  1360. 23590    FX=FX+1:NEXT
  1361. 23600    SX=FX
  1362. 23610    RETURN
  1363. 23620   *M_MEMBER  :' 書式 01,メンバーの番号
  1364. 23630    FOR I=1 TO KLEN(MEM$(OPT1))
  1365. 23640    MES$=AKCNV$(KMID$(MEM$(OPT1),I,1))
  1366. 23650    IF MES$=" " THEN NEXT:RETURN
  1367. 23660    SYMBOL (16*FX+X_RATIO,16*FY+Y_RATIO),MES$,M_SIZE!,M_SIZE!,%M_COL+8,,,M_FONT
  1368. 23670    IF M_TONE<>0 THEN BEEP 363523,4,M_TONE
  1369. 23680    FX=FX+1:IF FX>EX THEN FX=SX:FY=FY+1
  1370. 23690            IF FY>EY THEN GOSUB *MESW_CLEAR
  1371. 23700    IF FX MOD 4=0 OR M_FONT<>0 OR M_SIZE!<>1 OR M_SPEED<>0 THEN FOR J=1 TO M_SPEED:GOSUB *BG_ANIME:NEXT
  1372. 23710    NEXT:RETURN
  1373. 23720   *M_SPEED :' 書式 02,メッセージウェイト
  1374. 23730    M_SPEED=OPT1
  1375. 23740    RETURN
  1376. 23750   *M_TONE  :' 書式 03,(音程の)100の位,10の位,1の位
  1377. 23760    M_TONE =OPT1*100+OPT2*10+OPT3
  1378. 23770    RETURN
  1379. 23780   *M_COLOR :' 書式 04,メッセージの表示色(0-7)
  1380. 23790    M_COL  =OPT1
  1381. 23800    RETURN
  1382. 23810   *M_FONT  :' 書式 05,メッセージのフォント
  1383. 23820    M_FONT =OPT1
  1384. 23830    RETURN
  1385. 23840   *M_SIZE  :' 書式 06,(メッセージのサイズ)1の位,0.1の位,0.01の位
  1386. 23850    M_SIZE!=OPT1+OPT2*.1!+OPT3*.01!
  1387. 23860    RETURN
  1388. 23870   *M_BS
  1389. 23880    OPT2=8-OPT2
  1390. 23890    FOR I=1 TO OPT1
  1391. 23900     FX=FX-1:IF FX< 3 THEN FX=EX:FY=FY-1
  1392. 23910             IF FY<SY THEN FY=SY
  1393. 23920     PUT@A(16*FX+X_RATIO,16*FY+Y_RATIO)-(16*FX+15+X_RATIO,16*FY+15+Y_RATIO),W_TILE%
  1394. 23930     IF FX MOD OPT2=0 THEN GOSUB *BG_ANIME
  1395. 23940    NEXT
  1396. 23950    RETURN
  1397. 23960   *M_CR    :' 書式 08,改行行数
  1398. 23970     FX=SX:FY=FY+1
  1399. 23980     IF FY>EY THEN *MESW_CLEAR ELSE RETURN
  1400. 23990     OPT1=OPT1-1:IF OPT1=<0 THEN RETURN ELSE *M_CR
  1401. 24000   *M_INPUT :' 書式 09
  1402. 24010    SYMBOL(16*36+X_RATIO,16*27+Y_RATIO),"▼",1,1,%15
  1403. 24020    WHILE PTRIG(1)=0:GOSUB *BG_ANIME:WEND
  1404. 24030    PUT@A (16*36+X_RATIO,16*27+Y_RATIO)-(16*36+15+X_RATIO,16*27+15+Y_RATIO),W_TILE%
  1405. 24040    RETURN
  1406. 24050   *M_WAIT :' 書式 0A,ウェイト数
  1407. 24060    FOR I=0 TO OPT1:GOSUB *BG_ANIME:NEXT
  1408. 24070    RETURN
  1409. 24080   *M_PLAY
  1410. 24090    IF OPT1>8 THEN BEEP 0:RETURN
  1411. 24100    M1!=.75!   :FOR I=0 TO OPT1:M1!=M1!*2:NEXT:M1!=M1!*11      :'オクターヴの基本値(C)を求める
  1412. 24110    M2!=.34375!:FOR I=0 TO OPT1:M2!=M2!*2:NEXT:M1!=M1!+M2!*OPT2:'基本値に音程を乗せる
  1413. 24120    BEEP 363523,1024,M1!
  1414. 24130    RETURN
  1415. 24140   *M_SND :'書式 12,効果音番号,音量,再生方式(0:通常  1:演奏音量低下 2:待機再生)
  1416. 24150    IF OPT1> 64 THEN TEMES$=" 効果音番号の指定に誤りがあります(0~63)":GOTO *M_ERR
  1417. 24160    IF OPT2>127 THEN TEMES$=" 効果音音量の指定に誤りがあります(0~127)":GOTO *M_ERR
  1418. 24170    IF OPT3=1 THEN GOSUB *VOLUME_DOWN
  1419. 24180    IF OPT1=0 THEN
  1420. 24190      FOR I=1 TO 300/(60/3):GOSUB *BG_ANIME:NEXT
  1421. 24200    ELSE
  1422. 24210      CALLM TRANS,255,&H0014,VARPTR(SE(0))+20000*(OPT1-1),&H0014,VARPTR(SEBUF(0)),20000/4,4
  1423. 24220      PCMPLAY SEBUF,OPT2
  1424. 24230    ENDIF
  1425. 24240    IF OPT3=1 THEN WHILE PLAY(2)=-1:GOSUB *BG_ANIME:WEND:GOSUB *VOLUME_REPAIR
  1426. 24250    IF OPT3=2 THEN WHILE PLAY(2)=-1:GOSUB *BG_ANIME:WEND
  1427. 24260    RETURN
  1428. 24270   *M_TKMOVE :'書式 32,主移動会話番号,従属移動会話番号(0:従属者無し),移動速度
  1429. 24280    IF OPT3<>1 AND OPT3<>2 AND OPT3<>4 AND OPT3<>8 AND OPT3<>16 THEN TEMES$=" 移動速度の指定に誤りがあります(1,2,4,8,16)":GOTO *M_ERR
  1430. 24290    DUM=CALLM (NSEARCH,255,&H0014,MES_ADD+MPOS,ASC("/"),255,1)
  1431. 24300    IF DUM=0 THEN TEMES$=" 移動終了コード'/'を発見できませんでした":GOTO *M_ERR
  1432. 24310    TKMLENG=DUM-(MES_ADD+MPOS)
  1433. 24320    DUM=CALLM (TKSEARCH,255,OPT1,SMX,SMY,MPOSXMAX,MPOSYMAX,VARPTR(JUDGE%(0,0)),VARPTR(TKM_DAT%(0)))
  1434. 24330    :
  1435. 24340    TKMCHR=TKM_DAT%(0):TKMPTN1=TKM_DAT%(1):TKX=TKM_DAT%(2):TKY=TKM_DAT%(3)
  1436. 24350    SMX_SUB=TKM_DAT%(4):SMY_SUB=TKM_DAT%(5)
  1437. 24360    IF TKM_DAT%(0)=-1 THEN
  1438. 24370      IF DUM=2 OR DUM=3 THEN
  1439. 24380        TKMPTN1=M_FRONT%(SMX_SUB,SMY_SUB)
  1440. 24390      ELSE
  1441. 24400        TEMES$=" 対象が検索範囲内に存在していません":GOTO *M_ERR
  1442. 24410      ENDIF
  1443. 24420      CALLM CHR_DEF,255,368,TKX,TKY,TKMPTN1,PAL_NO%(TKMPTN1),1:'移動時のキャラを表示
  1444. 24430    ELSE
  1445. 24440      CALLM CHR_DEF,255,368,TKX,TKY,TKMPTN1,PAL_NO%(TKMPTN1),1:'移動時のキャラを表示
  1446. 24450      CALLM CHR_OFF,255,TKMCHR,TKMCHR,0:'元のキャラを消去
  1447. 24460    ENDIF
  1448. 24470    IF LF-512=OPT1 THEN CALLM CHR_OFF,255, 62, 63,0:'会話時表示キャラを消去
  1449. 24480    TKMPTN2=TKMPTN1-TKMPTN1 MOD 8
  1450. 24490    FOR I=0 TO TKMLENG-1
  1451. 24500      TKMDIR=VAL("&H"+CHR$(PEEK(MES_ADD+MPOS+I))):GOSUB *TKMOVE_MAIN
  1452. 24510    NEXT
  1453. 24520    MPOS=MPOS+TKMLENG+1
  1454. 24530    SMX2=(TKX-16*7)/16:SMY2=(TKY-16*7)/16
  1455. 24540    IF SMX+SMX2>=0 AND SMX+SMX2=<MPOSXMAX*15+14 AND SMY+SMY2>=0 AND SMY+SMY2=<MPOSYMAX*15+14 THEN
  1456. 24550      M_FRONT%(SMX+SMX2,SMY+SMY2)=TKMPTN2+MCPTN(TKMDIR_SUB)
  1457. 24560      JUDGE%  (SMX+SMX2,SMY+SMY2)=JUDGE%(SMX_SUB,SMY_SUB)
  1458. 24570      IF SMX+SMX2<>SMX_SUB OR SMY+SMY2<>SMY_SUB THEN
  1459. 24580        M_FRONT%(SMX_SUB,SMY_SUB)=64
  1460. 24590        JUDGE%  (SMX_SUB,SMY_SUB)= 0
  1461. 24600      ENDIF
  1462. 24610      IF TKX>=0 AND TKX<240 AND TKY>=0 AND TKY<240 THEN
  1463. 24620        CALLM TKSEARCH,255,OPT1,SMX,SMY,MPOSXMAX,MPOSYMAX,VARPTR(JUDGE%(0,0)),VARPTR(TKM_DAT%(0))
  1464. 24630        IF TKM_DAT%(0)=-1 THEN TEMES$=" 対象が検索範囲内に存在していません":GOTO *M_ERR
  1465. 24640        TKMCHR=TKM_DAT%(0):TKMPTN1=TKM_DAT%(1):TKX=TKM_DAT%(2):TKY=TKM_DAT%(3)
  1466. 24650        CALLM CHR_DEF,255,TKMCHR,TKX,TKY,TKMPTN2+MCPTN(TKMDIR_SUB),PAL_NO%(TKMPTN2),1:'元のキャラを表示
  1467. 24660      ENDIF
  1468. 24670    ELSE
  1469. 24680      M_FRONT%(SMX_SUB,SMY_SUB)=64
  1470. 24690      JUDGE%  (SMX_SUB,SMY_SUB)= 0
  1471. 24700    ENDIF
  1472. 24710    W_FLG=0
  1473. 24720    CALLM CHR_OFF,255,368,368,0:'移動用キャラを消去
  1474. 24730    RETURN
  1475. 24740    *TKMOVE_MAIN
  1476. 24750     IF TKMDIR<>0 THEN
  1477. 24760       IF TKMDIR=<8 THEN
  1478. 24770         FOR J=1 TO 16 STEP OPT3
  1479. 24780           TKX=TKX+PX(TKMDIR)*OPT3:TKY=TKY+PY(TKMDIR)*OPT3
  1480. 24790           IF TKX>=-16 AND TKX=<240 AND TKY>=-16 AND TKY=<240 THEN
  1481. 24800             W_FLG=ABS(W_FLG-1)
  1482. 24810             CALLM CHR_DEF,255,368,TKX,TKY,TKMPTN2+MCPTN(TKMDIR)+W_FLG,PAL_NO%(TKMPTN2),1
  1483. 24820             GOSUB *BG_ANIME
  1484. 24830           ENDIF
  1485. 24840           TKMDIR_SUB=TKMDIR
  1486. 24850         NEXT
  1487. 24860       ELSE
  1488. 24870         TKMDIR=TKMDIR-8
  1489. 24880         IF TKX>=-16 AND TKX=<240 AND TKY>=-16 AND TKY=<240 THEN
  1490. 24890           CALLM CHR_DEF,255,368,TKX,TKY,TKMPTN2+MCPTN(TKMDIR),PAL_NO%(TKMPTN2),1
  1491. 24900           GOSUB *BG_ANIME
  1492. 24910         ENDIF
  1493. 24920       TKMDIR_SUB=TKMDIR
  1494. 24930       ENDIF
  1495. 24940     ELSE
  1496. 24950       FOR J=1 TO 3:GOSUB *BG_ANIME:NEXT
  1497. 24960     ENDIF
  1498. 24970     RETURN
  1499. 24980   *M_MCMOVE:'書式 動作フラグ1(0:通常 1:スクロールのみ),動作フラグ2(0:復帰 1:移動),移動速度
  1500. 24990    IF OPT1>1 THEN TEMES$=" 動作フラグ1の指定に誤りがあります(0、1)":GOTO *M_ERR
  1501. 25000    IF OPT2>1 THEN TEMES$=" 動作フラグ2の指定に誤りがあります(0、1)":GOTO *M_ERR
  1502. 25010    IF OPT3<>0 AND OPT3<>1 AND OPT3<>2 AND OPT3<>4 AND OPT3<>8 AND OPT3<>16 THEN TEMES$=" 移動速度の指定に誤りがあります(0,1,2,4,8,16)":GOTO *M_ERR
  1503. 25020    IF OPT1=1 AND OPT2=1 THEN
  1504. 25030      CALLM CHR_DEF,255,61,16*7,16*7,MCHR+MCPTN(PD),PAL_NO%(MCHR),1
  1505. 25040      DUM=M_FRONT%(SMX,SMY)
  1506. 25050      CALLM CHR_DEF,255,60,16*7,16*7,DUM,PAL_NO%(DUM AND &H3FF),1
  1507. 25060    ENDIF
  1508. 25070    IF OPT3=0 THEN SC=SC_STEP ELSE SC=OPT3
  1509. 25080    DUM=CALLM (NSEARCH,255,&H0014,MES_ADD+MPOS,ASC("/"),255,1)
  1510. 25090    IF DUM=0 THEN TEMES$=" 移動終了コード'/'を発見できませんでした":GOTO *M_ERR
  1511. 25100    TKMLENG=DUM-(MES_ADD+MPOS)
  1512. 25110    FOR I=0 TO TKMLENG-1
  1513. 25120      TKMDIR=VAL("&H"+CHR$(PEEK(MES_ADD+MPOS+I))):PD2=TKMDIR
  1514. 25130      IF PD2=<8 THEN
  1515. 25140        CALLM BG_PUT,255,PD2,BG_STACK,SMX_ADD,SMY_ADD
  1516. 25150        FOR J=0 TO 15 STEP SC
  1517. 25160          IF J MOD 8=0 THEN W_FLG=ABS(W_FLG-1)
  1518. 25170            IF OPT1=0 THEN
  1519. 25180              CALLM BG_ROLL,255,PD2,SC,MCHR+MCPTN(PD2)+W_FLG,PAL_NO%(MCHR),BG_BUF,STACK,ANIME_QUANTITY
  1520. 25190            ELSE
  1521. 25200              CALLM BG_ROLL,255,PD2,SC,64,PAL_NO%(64),BG_BUF,STACK,ANIME_QUANTITY
  1522. 25210            ENDIF
  1523. 25220          ON EFCT GOSUB *雨天,*降雪,*濃霧,*減色,*照明
  1524. 25230        NEXT
  1525. 25240        IF SMX>=0 AND SMX=<SMXMAX AND SMY>=0 AND SMY=<SMYMAX THEN LF_SUB=JUDGE%(SMX,SMY) ELSE LF_SUB=0
  1526. 25250      ELSE
  1527. 25260        PD2=PD2-8
  1528. 25270        CALLM CHR_DEF,255,353,65536,65536,MCHR+MCPTN(PD2),PAL_NO%(MCHR),1
  1529. 25280      ENDIF
  1530. 25290    NEXT
  1531. 25300    IF OPT1=1 AND OPT2=0 THEN
  1532. 25310      CALLM CHR_OFF,255,60,61,0
  1533. 25320      CALLM CHR_DEF,255,353,16*7,16*7,MCHR+MCPTN(PD),PAL_NO%(MCHR),1
  1534. 25330    ENDIF
  1535. 25340    IF OPT1=0 THEN PD=PD2:PD_SUB=PD
  1536. 25350    MPOS=MPOS+TKMLENG+1
  1537. 25360    RETURN
  1538. 25370   *M_CHMOVE:RETURN
  1539. 25380   *M_MPWRITE
  1540. 25390    IF OPT2>  1 THEN MES$=" 保存フラグの記述に誤りがあります":GOTO *M_ERR
  1541. 25400    MES$=" 書換情報"+AKCNV$(STR$(OPT1))+"番の内容に従って地図が書き換えられました"
  1542. 25410    MCHG_ADD=BASE_ADD+2048:MCHG_ADD2=HEAD_ADD+6144+OPT1*8
  1543. 25420    MCHGKIND=PEEK(MCHG_ADD2+0  ):MCHGPTN=PEEK(MCHG_ADD2+2,2)
  1544. 25430    MCHGX   =PEEK(MCHG_ADD2+4,2):MCHGY  =PEEK(MCHG_ADD2+6,2)
  1545. 25440    IF MCHGKIND=0 THEN
  1546. 25450      M_FRONT%(MCHGX,MCHGY)=MCHGPTN
  1547. 25460    ELSE
  1548. 25470      IF MCHGKIND=1 THEN
  1549. 25480        M_BACK%(MCHGX,MCHGY)=MCHGPTN
  1550. 25490      ELSE
  1551. 25500        IF MCHGKIND=2 THEN
  1552. 25510          JUDGE%(MCHGX,MCHGY)=MCHGPTN
  1553. 25520        ELSE
  1554. 25530          IF MCHGKIND=3 THEN
  1555. 25540            M_FRONT%(MCHGX,MCHGY)=64
  1556. 25550            JUDGE%  (MCHGX,MCHGY)= 0
  1557. 25560          ENDIF
  1558. 25570        ENDIF
  1559. 25580      ENDIF
  1560. 25590    ENDIF
  1561. 25600    IF OPT2=1 THEN
  1562. 25610      I=0
  1563. 25620      IF PEEK(MCHG_ADD+12*I+3)<>0 THEN I=I+1:GOTO 25620
  1564. 25630      MCHG_ADD=MCHG_ADD+I*12
  1565. 25640      POKE MCHG_ADD+ 0,MAPNUM,2
  1566. 25650      POKE MCHG_ADD+ 2,OPT1
  1567. 25660      POKE MCHG_ADD+ 3,1
  1568. 25670      POKE MCHG_ADD+ 4,MCHGKIND
  1569. 25680      POKE MCHG_ADD+ 6,MCHGPTN,2
  1570. 25690      POKE MCHG_ADD+ 8,MCHGX,2
  1571. 25700      POKE MCHG_ADD+10,MCHGY,2
  1572. 25710      MES$=" 書換え情報番号"+AKCNV$(STR$(OPT1))+"の内容はキャラクター情報に記録されました"
  1573. 25720    ENDIF
  1574. 25730    RETURN
  1575. 25740   *M_MPERASE
  1576. 25750    DUM=OPT1*100+OPT2
  1577. 25760    IF DUM >999 THEN MES$=" 地図番号の記述に誤りがあります(0~999)":GOTO *M_ERR
  1578. 25770    MCHG_ADD=BASE_ADD+2048:DUM_FLG=0
  1579. 25780    FOR I=0 TO 511
  1580. 25790      MCHGMNUM=PEEK(MCHG_ADD+I*12+ 0,2)
  1581. 25800      MCHGNUM =PEEK(MCHG_ADD+I*12+ 2  )
  1582. 25810      MCHGUFLG=PEEK(MCHG_ADD+I*12+ 3  )
  1583. 25820      IF MCHGMNUM=DUM AND MCHGNUM=OPT3 AND MCHGUFLG=1 THEN
  1584. 25830        POKE MCHG_ADD+I*12+3,0:DUM_FLG=1:'使用フラグを解除
  1585. 25840      ENDIF
  1586. 25850    NEXT
  1587. 25860    IF DUM_FLG=1 THEN MES$=" 地図番号"+AKCNV$(STR$(DUM))+"、書換情報"+AKCNV$(STR$(OPT1))+"番の書換え情報が消去されました" ELSE MES$=" 該当する書換情報は存在しません"
  1588. 25870    RETURN
  1589. 25880   *M_DOOR
  1590. 25890    IF OPT1=1 THEN
  1591. 25900      ON OPT2+1 GOTO *MD1OP,*MD2OP,*MD3OP,*MD4OP
  1592. 25910    ELSE
  1593. 25920      ON OPT2+1 GOTO *MD1CL,*MD2CL,*MD3CL,*MD4CL
  1594. 25930    ENDIF
  1595. 25940    GOTO *M_ERR
  1596. 25950    *MD1OP
  1597. 25960    CALLM SND_PLAY,255,2,64,64,VARPTR(DOOR1_A%(0)):FOR K=1 TO 16:GOSUB *MD1S:NEXT:CALLM SND_PLAY,255,2,64,64,VARPTR(DOOR1_B%(0)):RETURN
  1598. 25970    *MD1CL
  1599. 25980    CALLM SND_PLAY,255,2,64,64,VARPTR(DOOR1_A%(0)):FOR K=15 TO 0 STEP -1:GOSUB *MD1S:NEXT:CALLM SND_PLAY,255,2,64,64,VARPTR(DOOR1_B%(0)):RETURN
  1600. 25990     *MD1S
  1601. 26000      PUT@A(768-K, 0)-(768-K+15,15),PTN_BUF%,,,,,64*705
  1602. 26010      PUT@A(784+K, 0)-(784+K+15,15),PTN_BUF%,,,,,64*706
  1603. 26020      PUT@A(768-K,16)-(768-K+15,31),PTN_BUF%,,,,,64*721
  1604. 26030      PUT@A(784+K,16)-(784+K+15,31),PTN_BUF%,,,,,64*722
  1605. 26040      PUT@A(768-K,32)-(768-K+15,47),PTN_BUF%,,,,,64*737
  1606. 26050      PUT@A(784+K,32)-(784+K+15,47),PTN_BUF%,,,,,64*738
  1607. 26060      GOSUB *MDDF
  1608. 26070      RETURN
  1609. 26080    *MD2OP
  1610. 26090     GOSUB *MD2S_INIT
  1611. 26100     CALLM SND_PLAY,255,2,64,64,VARPTR(DOOR2_A%(0)):FOR K=1 TO 16:GOSUB *MD2S:NEXT:CALLM SND_PLAY,255,2,64,64,VARPTR(DOOR2_B%(0)):RETURN
  1612. 26110    *MD2CL
  1613. 26120     CALLM SND_PLAY,255,2,64,64,VARPTR(DOOR2_A%(0)):FOR K=15 TO 0 STEP -1:GOSUB *MD2S:NEXT:CALLM SND_PLAY,255,2,64,64,VARPTR(DOOR2_B%(0)):RETURN
  1614. 26130     *MD2S_INIT
  1615. 26140      PUT@A(768, 0)-(783,15),PTN_BUF%,,,,,64*709
  1616. 26150      PUT@A(784, 0)-(799,15),PTN_BUF%,,,,,64*710
  1617. 26160      PUT@A(768,16)-(783,31),PTN_BUF%,,,,,64*725
  1618. 26170      PUT@A(784,16)-(799,31),PTN_BUF%,,,,,64*726
  1619. 26180      PUT@A(768,32)-(783,47),PTN_BUF%,,,,,64*741
  1620. 26190      PUT@A(784,32)-(799,47),PTN_BUF%,,,,,64*742
  1621. 26200      GET@A(768,0)-(799,47),DOOR%:RETURN
  1622. 26210     *MD2S
  1623. 26220      PUT@A(768+K*2,0)-(799+K*2,47),DOOR%
  1624. 26230      PUT@A(784+K, 0)-(799+K,15),PTN_BUF%,,,,,64*710
  1625. 26240      PUT@A(784+K,16)-(799+K,31),PTN_BUF%,,,,,64*726
  1626. 26250      PUT@A(784+K,32)-(799+K,47),PTN_BUF%,,,,,64*742
  1627. 26260      GOSUB *MDDF
  1628. 26270      RETURN
  1629. 26280    *MD3OP
  1630. 26290     GOSUB *MD3S_INIT:CALLM SND_PLAY,255,2,64,64,VARPTR(DOOR3_A%(0)):FOR K=1 TO 48:GOSUB *MD3S:NEXT:CALLM SND_PLAY,255,2,64,64,VARPTR(DOOR3_B%(0)):RETURN
  1631. 26300    *MD3CL
  1632. 26310     CALLM SND_PLAY,255,2,64,64,VARPTR(DOOR3_A%(0)):FOR K=47 TO 0 STEP -1:GOSUB *MD3S:NEXT:CALLM SND_PLAY,255,2,64,64,VARPTR(VARPTR(DOOR3_B%(0)):RETURN
  1633. 26320     *MD3S_INIT
  1634. 26330      PUT@A(768, 0)-(783,15),PTN_BUF%,,,,,64*713
  1635. 26340      PUT@A(784, 0)-(799,15),PTN_BUF%,,,,,64*714
  1636. 26350      PUT@A(768,16)-(783,31),PTN_BUF%,,,,,64*729
  1637. 26360      PUT@A(784,16)-(799,31),PTN_BUF%,,,,,64*730
  1638. 26370      PUT@A(768,32)-(783,47),PTN_BUF%,,,,,64*745
  1639. 26380      PUT@A(784,32)-(799,47),PTN_BUF%,,,,,64*746
  1640. 26390      GET@A(768,0)-(799,47),DOOR%:RETURN
  1641. 26400     *MD3S
  1642. 26410      PUT@A(768,-K)-(799,47-K),DOOR%
  1643. 26420      GOSUB *MDDF
  1644. 26430      RETURN
  1645. 26440    *MD4OP
  1646. 26450     CALLM SND_PLAY,255,2,64,64,VARPTR(DOOR4_B%(0))
  1647. 26460     GOSUB *MD4S_INIT:FOR K!=.9! TO 0 STEP -.1!:GOSUB *MD4S:NEXT:CALLM SND_PLAY,255,2,64,64,VARPTR(DOOR4_A%(0)):GOTO *MD4S
  1648. 26470    *MD4CL
  1649. 26480     CALLM SND_PLAY,255,2,64,64,VARPTR(DOOR4_B%(0)):FOR K!=.1! TO 1 STEP .1!:GOSUB *MD4S:NEXT:CALLM SND_PLAY,255,2,64,64,VARPTR(DOOR4_C%(0)):GOTO *MD4S
  1650. 26490     *MD4S_INIT
  1651. 26500      PUT@A(768, 0)-(783,15),PTN_BUF%,,,,,64*717
  1652. 26510      PUT@A(784, 0)-(799,15),PTN_BUF%,,,,,64*718
  1653. 26520      PUT@A(768,16)-(783,31),PTN_BUF%,,,,,64*733
  1654. 26530      PUT@A(784,16)-(799,31),PTN_BUF%,,,,,64*734
  1655. 26540      PUT@A(768,32)-(783,47),PTN_BUF%,,,,,64*749
  1656. 26550      PUT@A(784,32)-(799,47),PTN_BUF%,,,,,64*750
  1657. 26560      GET@A(768,0)-(799,47),DOOR%:RETURN
  1658. 26570     *MD4S
  1659. 26580      PUT@A(768,0)-(799,47),DOOR%,,K!
  1660. 26590      GOSUB *MDDF
  1661. 26600      RETURN
  1662. 26610     *MDDF
  1663. 26620      GET@A(768, 0)-(783,15),DOOR1%:GET@A(784, 0)-(799,15),DOOR2%
  1664. 26630      GET@A(768,16)-(783,31),DOOR3%:GET@A(784,16)-(799,31),DOOR4%
  1665. 26640      GET@A(768,32)-(783,47),DOOR5%:GET@A(784,32)-(799,47),DOOR6%
  1666. 26650      :
  1667. 26660      CALLM TRANS,255,&H14,VARPTR(DOOR1%(0)),&H130,&H4000+128*(705+4*OPT2),128/4,4
  1668. 26670      CALLM TRANS,255,&H14,VARPTR(DOOR2%(0)),&H130,&H4000+128*(706+4*OPT2),128/4,4
  1669. 26680      CALLM TRANS,255,&H14,VARPTR(DOOR3%(0)),&H130,&H4000+128*(721+4*OPT2),128/4,4
  1670. 26690      CALLM TRANS,255,&H14,VARPTR(DOOR4%(0)),&H130,&H4000+128*(722+4*OPT2),128/4,4
  1671. 26700      CALLM TRANS,255,&H14,VARPTR(DOOR5%(0)),&H130,&H4000+128*(737+4*OPT2),128/4,4
  1672. 26710      CALLM TRANS,255,&H14,VARPTR(DOOR6%(0)),&H130,&H4000+128*(738+4*OPT2),128/4,4
  1673. 26720      GOSUB *BG_ANIME:LINE(752,0)-(847,47),PRESET,,BF
  1674. 26730      RETURN
  1675. 26740   *M_YN_SEL
  1676. 26750    WHILE INKEY$<>"":GOSUB *BG_ANIME:WEND
  1677. 26760    GET@A(X_RATIO+16*2,16*2)-(X_RATIO+16*(6+2)+15,16*(4+2)+15),SEL2WINB
  1678. 26770    FOR I=0 TO 8
  1679. 26780      LINE(X_RATIO+16*2+I,16*2+I)-(X_RATIO+16*(6+2)+15-I,16*(4+2)+15-I),PSET,%WINCOL(I),B
  1680. 26790    NEXT
  1681. 26800    LINE(X_RATIO+16*2+9,16*2+9)-(X_RATIO+16*(6+2)+15-9,16*(4+2)+15-9),OPAQUE,%8,BF,W_TILE$(W_TYPE)
  1682. 26810    YN=0
  1683. 26820    SYMBOL(X_RATIO+16*5,16*3),"いいえ",1,1,%15
  1684. 26830    SYMBOL(X_RATIO+16*5,16*5),"はい ",1,1,%15
  1685. 26840    FOR I=3000 TO 4000 STEP 500:BEEP 363523,5,I:GOSUB *BG_ANIME:NEXT
  1686. 26850    :
  1687. 26860    SYMBOL(X_RATIO+16*3,16*4+YN*32-2),"▽",1,1,%15,1:I$=""
  1688. 26870    WHILE PAD(1)=0 AND PTRIG(1)=0 AND I$="":I$=INKEY$:GOSUB *BG_ANIME:WEND
  1689. 26880    PD=PAD(1):PT=PTRIG(1)
  1690. 26890    WHILE PAD(1)<>0 OR PTRIG(1)<>0 OR INKEY$<>"":GOSUB *BG_ANIME:WEND
  1691. 26900    IF PT=1 OR I$=CHR$(13) THEN 26960
  1692. 26910    PUT@A(X_RATIO+16*3,16*3+YN*32)-(X_RATIO+16*3+15,16*3+YN*32+15),W_TILE%
  1693. 26920    IF PD=1 OR I$=CHR$(&H1E) THEN YN=YN-1:IF YN<0 THEN YN=1
  1694. 26930    IF PD=5 OR I$=CHR$(&H1F) THEN YN=YN+1:IF YN>1 THEN YN=0
  1695. 26940    GOTO 26860
  1696. 26950    :
  1697. 26960    BEEP 363523,7,3000:FOR I=1 TO 3:GOSUB *BG_ANIME:NEXT
  1698. 26970    PUT@A(X_RATIO+16*2,16*2)-(X_RATIO+16*(6+2)+15,16*(4+2)+15),SEL2WINB
  1699. 26980    IF YN=1 THEN RETURN : 'いいえ
  1700. 26990    MPOS2=CALLM (DIVERGE,255,MES_ADD,240,OPT1)
  1701. 27000    IF MPOS2=0 THEN TEMES$=" 指定したラベル番号は存在しません。":GOTO *M_ERR
  1702. 27010    MPOS=MPOS2
  1703. 27020    RETURN
  1704. 27030   *M_4_SEL
  1705. 27040    WHILE INKEY$<>"":GOSUB *BG_ANIME:WEND
  1706. 27050    SELWSX=0:SELWSY=0:SELWRX=19:SELWRY=OPT1+1:SELWSW=1:GOSUB *SELWINDOW
  1707. 27060    :
  1708. 27070    SELY=-1:SEL=0:SELMAX=0:SELLENG=0:I=3000
  1709. 27080    :
  1710. 27090    MES$="":SELY=SELY+1
  1711. 27100    M_CUT1=PEEK(MES_ADD+MPOS,1)
  1712. 27110     IF M_CUT1=ASC("/") THEN
  1713. 27120      SYMBOL(X_RATIO+16*5,16*3+SELY*16),AKCNV$(MES$),1,1,%15
  1714. 27130      BEEP 363523,5,I:I=I+500
  1715. 27140      GOSUB *BG_ANIME
  1716. 27150      MPOS=MPOS+1:SELMAX=SELMAX+1
  1717. 27160      IF SELLENG<KLEN(MES$) THEN SELLENG=KLEN(MES$)
  1718. 27170      IF SELMAX>=OPT1 THEN SELMAX=OPT1-1:GOTO 27290 ELSE 27090
  1719. 27180     ELSE
  1720. 27190      IF M_CUT1=ASC("@") THEN
  1721. 27200       IF SELY=0 THEN TEMES$=" 選択肢が入力されていません。":GOTO *M_ERR
  1722. 27210       SYMBOL(X_RATIO+16*5,16*3+SELY*16),AKCNV$(MES$),1,1,%15:GOTO 27290
  1723. 27220       GOSUB *BG_ANIME
  1724. 27230      ENDIF
  1725. 27240      MES$=MES$+CHR$(M_CUT1)
  1726. 27250     ENDIF
  1727. 27260    MPOS=MPOS+1
  1728. 27270    GOTO 27100
  1729. 27280    :
  1730. 27290    IF SELLENG<KLEN(MES$) THEN SELLENG=KLEN(MES$)
  1731. 27300    SYMBOL(X_RATIO+16*3,16*4+SEL*16-2),"▽",1,1,%15,1:I$=""
  1732. 27310    WHILE PAD(1)=0 AND PTRIG(1)=0 AND I$="":I$=INKEY$:GOSUB *BG_ANIME:WEND
  1733. 27320    PD=PAD(1):PT=PTRIG(1)
  1734. 27330    WHILE PAD(1)<>0 OR PTRIG(1)<>0 OR INKEY$<>"":GOSUB *BG_ANIME:WEND
  1735. 27340    IF PT=1 OR I$=CHR$(13) THEN 27400
  1736. 27350    PUT@A(X_RATIO+16*3,16*3+SEL*16)-(X_RATIO+16*3+15,16*3+SEL*16+15),W_TILE%
  1737. 27360    IF PD=1 OR I$=CHR$(&H1E) THEN SEL=SEL-1:BEEP 363523,3,2000:IF SEL<     0 THEN SEL=SELMAX
  1738. 27370    IF PD=5 OR I$=CHR$(&H1F) THEN SEL=SEL+1:BEEP 363523,3,2000:IF SEL>SELMAX THEN SEL=     0
  1739. 27380    GOTO 27300
  1740. 27390    :
  1741. 27400    BEEP 363523,7,3000:FOR I=1 TO 3:GOSUB *BG_ANIME:NEXT
  1742. 27410    SELWSW=0:GOSUB *SELWINDOW
  1743. 27420    RETURN
  1744. 27430   *M_SEL_DIV
  1745. 27440    IF SEL=0 THEN RETURN
  1746. 27450    IF SEL=1 THEN MPOS2=CALLM (DIVERGE,255,MES_ADD,240,OPT1)
  1747. 27460    IF SEL=2 THEN MPOS2=CALLM (DIVERGE,255,MES_ADD,240,OPT2)
  1748. 27470    IF SEL=3 THEN MPOS2=CALLM (DIVERGE,255,MES_ADD,240,OPT3)
  1749. 27480    IF MPOS2=0 THEN TEMES$=" 指定したラベル番号は存在しません。(オプション:"+STR$(SEL)+"番)":GOTO *M_ERR
  1750. 27490    MPOS=MPOS2
  1751. 27500    RETURN
  1752. 27510   *M_FLG_SET
  1753. 27520    IF OPT2>15 THEN TEMES$=" 立てるビットの指定に誤りがあります":GOTO *M_ERR
  1754. 27530    CALLM BIT_SET,255,1,OPT2,OPT2,&H14,FLG_ADD+2*OPT1
  1755. 27540    TEMES$=" フラグ番号"+STR$(OPT1)+"番の優先順位"+STR$(OPT2)+"位が立てられました"
  1756. 27550    RETURN
  1757. 27560   *M_FLG_RST
  1758. 27570    IF OPT2>15 THEN TEMES$=" 下げるビットの指定に誤りがあります":GOTO *M_ERR
  1759. 27580    CALLM BIT_SET,255,0,OPT2,OPT2,&H14,FLG_ADD+2*OPT1
  1760. 27590    TEMES$=" フラグ番号"+STR$(OPT1)+"番の優先順位"+STR$(OPT2)+"位が下げられました"
  1761. 27600    RETURN
  1762. 27610   *M_FLG_DIV
  1763. 27620    IF OPT2>240 THEN TEMES$=" フラグ分岐用のラベルには240番以下を指定してください。":GOTO *M_ERR
  1764. 27630    MBIT=CALLM (BIT_SCAN,255,FLG_ADD+2*OPT1)
  1765. 27640    IF MBIT=255 THEN TEMES$=" フラグ番号"+STR$(OPT1)+"のビットは立っていません。分岐を行わず、会話を続行します。"::RETURN
  1766. 27650    TEMES$=" フラグ番号"+STR$(OPT1)+"番の優先順位"+STR$(MBIT)+"位によって、ラベル番号"+STR$(OPT2+15-MBIT)+"へ分岐します":
  1767. 27660    MPOS2=CALLM (DIVERGE,255,MES_ADD,240,OPT2+15-MBIT)
  1768. 27670    IF MPOS2=0 THEN TEMES$=" ラベル番号"+STR$(OPT2+15-MBIT)+"は存在しません。":GOTO *M_ERR
  1769. 27680    MPOS=MPOS2
  1770. 27690    RETURN
  1771. 27700   *M_LABEL
  1772. 27710    RETURN
  1773. 27720   *M_JUMP
  1774. 27730    MPOS2=CALLM (DIVERGE,255,MES_ADD,240,OPT1)
  1775. 27740    IF MPOS2=0 THEN TEMES$=" ラベル番号"+STR$(OPT1)+"は存在しません。":GOTO *M_ERR
  1776. 27750    MPOS=MPOS2
  1777. 27760    RETURN
  1778. 27770   *M_ENDING
  1779. 27780    FOR I=0 TO 50:GOSUB *BG_ANIME:NEXT
  1780. 27790    CALLM PAL_CHG,255,0, 0,255,31, 1, 1,0,0,0,VARPTR(COL_BUF%(0)) : 'フェードアウト
  1781. 27800    SPRITE ON:SPRITE OFF:SCREEN@ 0:CLS:PLAY OFF:END
  1782. 27810    :
  1783. 27820   *M_ERR
  1784. 27830    GOSUB *ERR_SOUND:GOSUB *ERR_SOUND:GOSUB *ERR_SOUND:RETURN
  1785. 27840    :
  1786. 27850    :
  1787. 27860  *MES_OPEN
  1788. 27870   IF MNAME_FLG=1 THEN GOSUB *MAPNAME_ERASE
  1789. 27880   OUT &H440,17:OUT &H442,CRTC(17),2:OUT &H440,18:OUT &H442,CRTC(18),2:OUT &HFDA0,&H0F
  1790. 27890   GET@A (X_RATIO+16*2,Y_RATIO+16*19)-(X_RATIO+16*37+15,Y_RATIO+16*28+15),MSWINB
  1791. 27900   'PALETTE 4,[ 50, 50, 50]:PALETTE 5,[100,100,100]:PALETTE 6,[150,150,150]
  1792. 27910   'PALETTE 8,[  0,  0,  0]
  1793. 27920   'IF EFCT=3 AND W_TYPE=0 THEN PALETTE 7,[80,80,80] ELSE PALETTE 7,[0,0,0]
  1794. 27930   FOR I=0 TO 8
  1795. 27940     LINE(X_RATIO+16*2+I,Y_RATIO+16*19+I)-(X_RATIO+16*37+15-I,Y_RATIO+16*28+15-I),PSET,%WINCOL(I),B
  1796. 27950   NEXT
  1797. 27960   LINE(X_RATIO+16*2+9,Y_RATIO+16*19+9)-(X_RATIO+16*37+15-9,Y_RATIO+16*28+15-9),OPAQUE,%8,BF,W_TILE$(W_TYPE)
  1798. 27970   RETURN
  1799. 27980   :
  1800. 27990  *MES_CLOSE
  1801. 28000   SYMBOL(16*36+X_RATIO,16*27+Y_RATIO),"▼",1,1,%15
  1802. 28010   WHILE PTRIG(1) =0:GOSUB *BG_ANIME:WEND
  1803. 28020   WHILE PTRIG(1)<>0:GOSUB *BG_ANIME:WEND
  1804. 28030   PUT@A (X_RATIO+16*2,Y_RATIO+16*19)-(X_RATIO+16*37+15,Y_RATIO+16*28+15),MSWINB
  1805. 28040   CALLM CHR_OFF,255,62,63,0:TALK_FLG=0
  1806. 28050   RETURN
  1807. 28060   :
  1808. 28070  *MESW_CLEAR
  1809. 28080   SYMBOL(16*36+X_RATIO,16*27+Y_RATIO),"▼",1,1,%15
  1810. 28090   WHILE PTRIG(1) =0:GOSUB *BG_ANIME:WEND
  1811. 28100   LINE(X_RATIO+16*2+9,Y_RATIO+16*19+9)-(X_RATIO+16*37+15-9,Y_RATIO+16*28+15-9),OPAQUE,%8,BF,W_TILE$(W_TYPE)
  1812. 28110   SX=4:FX=SX:FY=SY
  1813. 28120   RETURN
  1814. 28130  :
  1815. 28140  *SELWINDOW ' selwsx(開始位置),selwsy(開始位置),selwrx(幅),selwry(幅),selwsw(0:閉じる 1:開く)
  1816. 28150   IF SELWSW=1 THEN
  1817. 28160    GET@A(X_RATIO+16*2  ,16*2  )-(X_RATIO+16*(SELWRX+2)+15  ,16*(SELWRY+2)+15  ),SEL4WINB
  1818. 28170    FOR I=0 TO 8
  1819. 28180      LINE (X_RATIO+16*2+I,16*2+I)-(X_RATIO+16*(SELWRX+2)+15-I,16*(SELWRY+2)+15-I),PSET,%WINCOL(I),B
  1820. 28190    NEXT
  1821. 28200    LINE (X_RATIO+16*2+9,16*2+9)-(X_RATIO+16*(SELWRX+2)+15-9,16*(SELWRY+2)+15-9),OPAQUE,%8,BF,W_TILE$(W_TYPE)
  1822. 28210   ELSE
  1823. 28220    PUT@A(X_RATIO+16*2  ,16*2  )-(X_RATIO+16*(SELWRX+2)+15  ,16*(SELWRY+2)+15  ),SEL4WINB
  1824. 28230   ENDIF
  1825. 28240   RETURN
  1826. 28250   :
  1827. 28260  *VOLUME_DOWN
  1828. 28270   INTERVAL STOP
  1829. 28280   VOL_FLG=1
  1830. 28290   FOR VOL=63-VOLUME TO 63-VOLUME-32 STEP -1
  1831. 28300    OUT &H4E3,4:OUT &H4E2,VOL
  1832. 28310    OUT &H4E3,5:OUT &H4E2,VOL
  1833. 28320    IF VOL MOD 6=0 THEN GOSUB *BG_ANIME
  1834. 28330   NEXT
  1835. 28340   INTERVAL ON
  1836. 28350   RETURN
  1837. 28360   :
  1838. 28370  *VOLUME_REPAIR
  1839. 28380   INTERVAL STOP
  1840. 28390   VOL_FLG=0
  1841. 28400   FOR VOL=63-VOLUME-32 TO 63-VOLUME
  1842. 28410    OUT &H4E3,4:OUT &H4E2,VOL
  1843. 28420    OUT &H4E3,5:OUT &H4E2,VOL
  1844. 28430    IF VOL MOD 6=0 THEN GOSUB *BG_ANIME
  1845. 28440   NEXT
  1846. 28450   INTERVAL ON
  1847. 28460   RETURN
  1848. 28470   :
  1849. 28480   :
  1850. 28490 *IN_OUT
  1851. 28500  GOSUB *BG_ROLL:IF MNAME_FLG=1 THEN GOSUB *MAPNAME_ERASE
  1852. 28510  :
  1853. 28520  MWARP_ADD2=MWARP_ADD+46*(LF-768)
  1854. 28530  MWARPSE   =PEEK(MWARP_ADD2+13)
  1855. 28540  IF MWARPSE<>0 THEN SENUM=MWARPSE:GOSUB *SND_PLAYER
  1856. 28550  :
  1857. 28560  IF PEEK(CD_ADD+128*CDNO+4*PEEK(MWARP_ADD+46*(LF-768)+12))<>TRACK THEN GOSUB *CD_FADEOUT
  1858. 28570  CALLM MAP_PUT,255,BG_STACK(10)+1,BG_STACK(12)+1,MPOSXMAX,MPOSYMAX,F_OVER,B_OVER,VARPTR(M_FRONT%(0,0)),VARPTR(M_BACK%(0,0)),VARPTR(PAL_NO%(0)),1,1,0,0
  1859. 28580  CALLM CHR_OFF,255,0,EFCT_QUANTITY-1,0:CALLM CHR_OFF,255,56,63,0:CALLM CHR_OFF,255,357,368,0
  1860. 28590  FOR I=0 TO 3:CALLM CHR_DEF,255,353+I,16*7,16*7,MCHR+MCPTN(PD_SUB),PAL_NO%(MCHR),1:NEXT
  1861. 28600  OUT &HFDA0,&H0F
  1862. 28610  IF TEST_MODE=1 THEN '霧効果の消去
  1863. 28620    LINE(0,0)-(1023,511),PRESET,,BF
  1864. 28630  ELSE
  1865. 28640    LINE(16,16)-(255,255),PRESET,,BF
  1866. 28650  ENDIF
  1867. 28660  CALLM R_ERASE,255,0,VARPTR(E2_PTN%(0))
  1868. 28670  :
  1869. 28680  CX_BASE       =PEEK(MWARP_ADD2+ 2,2):POKE BASE_ADD+34,CX_BASE,2
  1870. 28690  CY_BASE       =PEEK(MWARP_ADD2+ 4,2):POKE BASE_ADD+36,CY_BASE,2
  1871. 28700  F_OVER        =PEEK(MWARP_ADD2+ 6,2):POKE BASE_ADD+38,F_OVER  ,2
  1872. 28710  B_OVER        =PEEK(MWARP_ADD2+ 8,2):POKE BASE_ADD+40,B_OVER  ,2
  1873. 28720  ANIME_QUANTITY=PEEK(MWARP_ADD2+10  ):POKE BASE_ADD+42,ANIME_QUANTITY
  1874. 28730  EFCT          =PEEK(MWARP_ADD2+11  ):POKE BASE_ADD+43,EFCT
  1875. 28740  CDKIND        =PEEK(MWARP_ADD2+12  ):POKE BASE_ADD+44,CDKIND
  1876. 28750  TRACK         =PEEK(CD_ADD+128*CDNO+4*CDKIND)
  1877. 28760  CALLM TRANS,255,&H0014,MWARP_ADD2+14,&H0014,PEEK(VARPTR(MWARPNAME$),4),32/4,4:'地図名
  1878. 28770  CALLM TRANS,255,&H0014,MWARP_ADD2+14,&H0014,BASE_ADD+0                ,32/4,4:'地図名
  1879. 28780  :
  1880. 28790  CALLM TRANS,255,&H0014,VARPTR(COL_BUF%(0)),&H0130,&H2000,2*16*256/4   ,4:'パレット初期化
  1881. 28800  CALLM TRANS,255,&H0014,VARPTR(PTN_BUF%(0)),&H0130,&H4000,16*16/2*896/4,4:'パターン初期化
  1882. 28810  PLAY OFF
  1883. 28820  :
  1884. 28830  IF EFCT=3 THEN PALETTE 7,[80,80,80] ELSE PALETTE 7,[0,0,0]
  1885. 28840  ON EFCT+1 GOSUB *EFCT_INIT,*RAIN_INIT,*SNOW_INIT,*MIST_INIT,*HFCOL_INIT,*HFCOL_INIT
  1886. 28850  GOSUB *LUS_CHR_MAKE :'波うち用キャラを作成
  1887. 28860  FOR I=0 TO 3:CALLM CHR_DEF,255,353+I,16*16,16*16,MCHR+MCPTN(PD_SUB),PAL_NO%(MCHR),1:NEXT
  1888. 28870  :
  1889. 28880  CODE_U=16:CODE_D=15:CODE_L=16:CODE_R=15
  1890. 28890  Y_U=496:Y_D=240:X_L=496:X_R=240
  1891. 28900  IF CX_BASE>=32768 THEN CX_BASE=CX_BASE-65536
  1892. 28910  IF CY_BASE>=32768 THEN CY_BASE=CY_BASE-65536
  1893. 28920  CX_L =CX_BASE-1:CX_R=CX_BASE+15:SMX=CX_BASE+7:SMX_ADD=VARPTR(SMX)
  1894. 28930  CY_U =CY_BASE-1:CY_D=CY_BASE+15:SMY=CY_BASE+7:SMY_ADD=VARPTR(SMY)
  1895. 28940  IF SMX>=0 AND SMY>=0 THEN
  1896. 28950   LF=JUDGE%(SMX,SMY):IF LF=7 THEN LF_FLG=1 ELSE LF_FLG=0
  1897. 28960  ENDIF
  1898. 28970  SMXMAX=MPOSXMAX*15+14:SMYMAX=MPOSYMAX*15+14:PD=5
  1899. 28980  BG_BUF=VARPTR(BG_BUF%(0)):STACK=VARPTR(STACK%(0)):BG_STACK=VARPTR(BG_STACK(0))
  1900. 28990  :
  1901. 29000  BG_STACK( 0)=SMXMAX+1             :BG_STACK( 1)=SMYMAX+1
  1902. 29010  BG_STACK( 2)=VARPTR(M_FRONT%(0,0)):BG_STACK( 3)=VARPTR(M_BACK%(0,0))
  1903. 29020  BG_STACK( 5)=VARPTR(PAL_NO%(0))   :BG_STACK( 6)=CODE_U
  1904. 29030  BG_STACK( 7)=CODE_D               :BG_STACK( 8)=CODE_L:BG_STACK( 9)=CODE_R
  1905. 29040  BG_STACK(10)=  CX_L               :BG_STACK(11)=  CX_R:BG_STACK(12)=  CY_U
  1906. 29050  BG_STACK(13)=  CY_D               :BG_STACK(14)=F_OVER:BG_STACK(15)=B_OVER
  1907. 29060  :
  1908. 29070  CALLM MAP_PUT,255,BG_STACK(10)+1,BG_STACK(12)+1,MPOSXMAX,MPOSYMAX,F_OVER,B_OVER,VARPTR(M_FRONT%(0,0)),VARPTR(M_BACK%(0,0)),VARPTR(PAL_NO%(0)),1,1,240,240
  1909. 29080  CALLM R_ERASE,255,1,VARPTR(E2_PTN%(0))
  1910. 29090  GOSUB *CD_PLAYER:CALLM CHR_OFF,255,0,EFCT_QUANTITY-1,1
  1911. 29100  :
  1912. 29110  OUT &H440,17:OUT &H442,CRTC(17),2:OUT &H440,18:OUT &H442,CRTC(18),2:OUT &HFDA0,&H0F
  1913. 29120  GET@A(X_RATIO+16*(12-1),Y_RATIO+16*(5-1))-(X_RATIO+16*(12+16)+15,Y_RATIO+16*(5+1)+15),MNAMEW
  1914. 29130  FOR I=0 TO 8
  1915. 29140   LINE(X_RATIO+16*(12-1)+I,Y_RATIO+16*(5-1)+I)-(X_RATIO+16*(12+16)+15-I,Y_RATIO+16*(5+1)+15-I),PSET,%WINCOL(I),B:NEXT
  1916. 29150   LINE(X_RATIO+16*(12-1)+9,Y_RATIO+16*(5-1)+9)-(X_RATIO+16*(12+16)+15-9,Y_RATIO+16*(5+1)+15-9),OPAQUE,%8,BF,W_TILE$(W_TYPE)
  1917. 29160  SYMBOL(X_RATIO+16*12,Y_RATIO+16*5),MWARPNAME$,1,1,%15
  1918. 29170  TIMER(0)=VAL(RIGHT$(TIME$,2)):TIMER(1)=VAL(MID$(TIME$,4,2)):TIMER(2)=VAL(LEFT$(TIME$,2))
  1919. 29180  TIMER(0)=TIMER(0)+5:IF TIMER(0)>=60 THEN TIMER(0)=TIMER(0)-60:TIMER(1)=TIMER(1)+1
  1920. 29190                      IF TIMER(1)>=60 THEN TIMER(1)=TIMER(1)-60:TIMER(2)=TIMER(2)+1
  1921. 29200                      IF TIMER(2)>=24 THEN TIMER(2)=TIMER(2)-24
  1922. 29210  TIMER$(0)=STRING$(3-LEN(STR$(TIMER(0))),"0")+RIGHT$(STR$(TIMER(0)),LEN(STR$(TIMER(0)))-1)
  1923. 29220  TIMER$(1)=STRING$(3-LEN(STR$(TIMER(1))),"0")+RIGHT$(STR$(TIMER(1)),LEN(STR$(TIMER(1)))-1)
  1924. 29230  TIMER$(2)=STRING$(3-LEN(STR$(TIMER(2))),"0")+RIGHT$(STR$(TIMER(2)),LEN(STR$(TIMER(2)))-1)
  1925. 29240  TIMER$=TIMER$(2)+":"+TIMER$(1)+":"+TIMER$(0)
  1926. 29250  MNAME_FLG=1:TIME TIMER$:ON TIME GOSUB *MAPNAME_ERASE:TIME ON
  1927. 29260  RETURN
  1928. 29270  *MAPNAME_ERASE
  1929. 29280   TIME OFF:MNAME_FLG=0
  1930. 29290   PUT@A(X_RATIO+16*(12-1),Y_RATIO+16*(5-1))-(X_RATIO+16*(12+16)+15,Y_RATIO+16*(5+1)+15),MNAMEW
  1931. 29300   RETURN
  1932. 29310  *SND_PLAYER
  1933. 29320   IF SENUM>SENUMMAX THEN RETURN
  1934. 29330   'CALLM TRANS,255,&H0014,VARPTR(SE(0))+20000*(SENUM-1),&H0014,VARPTR(SEBUF(0)),20000/4,4
  1935. 29340   CANNEL_NUM=CHANNEL_NUM+1:IF CHANNEL_NUM>2 THEN CHANNEL_NUM=0
  1936. 29350   CALLM SND_PLAY,255,7-CHANNEL_NUM,64,64,VARPTR(SE(0))+20000*(SENUM-1)
  1937. 29360   RETURN
  1938. 29370   :
  1939. 29380   :
  1940. 29390   :
  1941. 29400   :
  1942. 29410   :
  1943. 29420   :
  1944. 29430   :
  1945. 29440 *EFCT_INIT
  1946. 29450  FOR REP=0 TO EFCT_QUANTITY-1
  1947. 29460   CALLM CHR_DEF,255,REP,0,0,64,0,0
  1948. 29470  NEXT
  1949. 29480  RETURN
  1950. 29490  :
  1951. 29500 *RAIN_INIT
  1952. 29510  CALLM PAL_CHG,255,2,0,255, 1, 1, 1,0,0,0,VARPTR(COL_BUF%(0)) : '色を半減する
  1953. 29520  FOR REP=0 TO EFCT_QUANTITY-1
  1954. 29530   RAIN_STATUS(REP)=FIX(RND(1)*5)+880
  1955. 29540   RAIN_X(REP)=FIX(RND(1)*240):RAIN_Y(REP)=FIX(RND(1)*240)
  1956. 29550   CALLM CHR_DEF,255,REP,RAIN_X(REP),RAIN_Y(REP),RAIN_STATUS(REP),193,0
  1957. 29560  NEXT
  1958. 29570  RS_ADD=VARPTR(RAIN_STATUS(0)):RX_ADD=VARPTR(RAIN_X(0)):RY_ADD=VARPTR(RAIN_Y(0))
  1959. 29580  T_FLG_ADD=VARPTR(T_FLG)
  1960. 29590  CALLM SND_PLAY,255,0,64,64,VARPTR(RAIN%(0))
  1961. 29600  RETURN
  1962. 29610  :
  1963. 29620 *雨天
  1964. 29630  IF EFCT_FLG=0 THEN RETURN
  1965. 29640  CALLM RAINFALL,255,RS_ADD,RX_ADD,RY_ADD,EFCT_QUANTITY,T_FLG_ADD
  1966. 29650  :
  1967. 29660  IF T_FLG= 0 AND RND(1)*300\1=150 THEN CALLM THUNDER,255:T_FLG=1:T_SND=FIX(RND(1)*123)+4:SND_PAN=32+FIX(RND(1)*96)
  1968. 29670  IF T_FLG=T_SND THEN
  1969. 29680    T_FLG=0
  1970. 29690    IF PLAY(2)<>-1 THEN CALLM SND_PLAY,255,1,SND_PAN,127-T_SND,VARPTR(THUNDER%(0))
  1971. 29700    T_SND=1
  1972. 29710  ENDIF
  1973. 29720  RETURN
  1974. 29730  :
  1975. 29740  :
  1976. 29750 *SNOW_INIT
  1977. 29760  CALLM PAL_CHG,255,2,0,255, 1, 1, 1,0,0,0,VARPTR(COL_BUF%(0)) : '色を半減する
  1978. 29770  FOR θ=0 TO 89
  1979. 29780   SIN_BUF(θ)=(SIN(3.14159!/180*θ*4)*3)\1
  1980. 29790  NEXT
  1981. 29800  FOR REP=0 TO EFCT_QUANTITY-1
  1982. 29810   SNOW_RAD(REP)=FIX(RND(1)*90)
  1983. 29820   IF REP=<EFCT_QUANTITY*1         THEN SNOW_STATUS(REP)=885
  1984. 29830   IF REP=<EFCT_QUANTITY* .5!      THEN SNOW_STATUS(REP)=886
  1985. 29840   IF REP=<EFCT_QUANTITY* .125!    THEN SNOW_STATUS(REP)=887
  1986. 29850   IF REP=<EFCT_QUANTITY* .0625!   THEN SNOW_STATUS(REP)=888
  1987. 29860   IF REP=<EFCT_QUANTITY* .003125! THEN SNOW_STATUS(REP)=889
  1988. 29870   AXIS(REP)=FIX(RND(1)*240):SNOW_Y(REP)=FIX(RND(1)*512)
  1989. 29880   CALLM CHR_DEF,255,REP,AXIS(REP)+SIN_BUF(SNOW_RAD(REP)),SNOW_Y(REP),SNOW_STATUS(REP),194,0
  1990. 29890  NEXT
  1991. 29900  SNOW_STATUS=VARPTR(SNOW_STATUS(0)):AXIS=VARPTR(AXIS(0)):SNOW_Y=VARPTR(SNOW_Y(0))
  1992. 29910  SIN_BUF=VARPTR(SIN_BUF(0)):SNOW_RAD=VARPTR(SNOW_RAD(0))
  1993. 29920  RETURN
  1994. 29930  :
  1995. 29940 *降雪
  1996. 29950  IF EFCT_FLG=0 THEN RETURN
  1997. 29960  CALLM SNOWFALL,255,SNOW_STATUS,AXIS,SNOW_Y,SIN_BUF,SNOW_RAD,EFCT_QUANTITY
  1998. 29970  RETURN
  1999. 29980  :
  2000. 29990  :
  2001. 30000 *MIST_INIT
  2002. 30010  CALLM PAL_CHG,255,2,0,255, 1, 1, 1,0,0,0,VARPTR(COL_BUF%(0)) : '色を半減する
  2003. 30020  GOSUB *EFCT_INIT
  2004. 30030  REP=0:SP=8:MIST_FLG=0:RESTORE 30040
  2005. 30040  FOR I=0 TO 2:READ MC(I):PALETTE I+1,[MC(I),MC(I),MC(I)]:NEXT:DATA 224,240,240
  2006. 30050  IF TEST_MODE=0 THEN
  2007. 30060    LINE(16,16)-(255,255),OPAQUE,%8,BF,MIST_TILE$
  2008. 30070  ELSE
  2009. 30080    CALLM TRANS,255,&H0014,VARPTR(MIST%(0)),&H0120,         0,1024*256/2/4,4
  2010. 30090    CALLM TRANS,255,&H0014,VARPTR(MIST%(0)),&H0120,1024*256/2,1024*256/2/4,4
  2011. 30100  ENDIF
  2012. 30110  RETURN
  2013. 30120  :
  2014. 30130  :
  2015. 30140 *濃霧
  2016. 30150  IF PATSEL_FLG=1 THEN RETURN
  2017. 30160  IF EFCT_FLG=0 AND TALK_FLG=0 THEN OUT &HFDA0,&H03:RETURN ELSE OUT &HFDA0,&H0F
  2018. 30170  IF TALK_FLG=0 AND TEST_MODE=1 AND MNAME_FLG=0 THEN
  2019. 30180   OUT &H440,17:OUT &H443,MS/SP,2
  2020. 30190   MS=MS+1:IF MS=512*SP THEN MS=0 
  2021. 30200   ESC=ABS(ESC-1):OUT &H440,18
  2022. 30210   IF SCAN_FLG=2 THEN OUT &H442,CRTC(18)+ESC*2 ELSE OUT &H442,CRTC(18)+ESC
  2023. 30220  ENDIF
  2024. 30230  REP=REP+1:IF REP=3 THEN REP=0
  2025. 30240  ON MIST_FLG+1 GOSUB 30270,30290
  2026. 30250  RETURN
  2027. 30260  :
  2028. 30270  MC(REP)=MC(REP)+16:IF MC(REP)>240 THEN MIST_FLG=1:GOTO 30290
  2029. 30280  PALETTE REP+1,[MC(REP),MC(REP),MC(REP)]:RETURN
  2030. 30290  MC(REP)=MC(REP)-16:IF MC(REP)<224 THEN MIST_FLG=0:GOTO 30270
  2031. 30300  PALETTE REP+1,[MC(REP),MC(REP),MC(REP)]:RETURN
  2032. 30310  :
  2033. 30320  :
  2034. 30330 *HFCOL_INIT
  2035. 30340  GOSUB *EFCT_INIT
  2036. 30350  CALLM PAL_CHG,255,2,0,255, 1, 1, 1,0,0,0,VARPTR(COL_BUF%(0)) : '色を半減する
  2037. 30360  RETURN
  2038. 30370  :
  2039. 30380 *減色
  2040. 30390  RETURN
  2041. 30400  :
  2042. 30410  :
  2043. 30420 *照明
  2044. 30430  LIGHT_FLG=FIX(RND(1)*5)
  2045. 30440  IF LIGHT_FLG=0 THEN
  2046. 30450    OUT &HFDA0,&H0C
  2047. 30460  ELSE
  2048. 30470    OUT &HFDA0,&H0F
  2049. 30480  ENDIF
  2050. 30490  RETURN
  2051. 30500  :
  2052. 30510  :
  2053. 30520 *BG_ANIME
  2054. 30530  CALLM BG_ROLL,255,0,0,MCHR+W_FLG+MCPTN(PD),PAL_NO%(MCHR),BG_BUF,STACK,ANIME_QUANTITY
  2055. 30540  ON EFCT GOSUB *雨天,*降雪,*濃霧,*減色,*照明
  2056. 30550  RETURN
  2057. 30560  :
  2058. 30570 *PRINT
  2059. 30580 :
  2060. 30590 IF ZX=0 THEN ZX=1
  2061. 30600 IF ZY=0 THEN ZY=1
  2062. 30610 IF FCOL=0 THEN FCOL=15
  2063. 30620 MES$=AKCNV$(MES$)
  2064. 30630 :
  2065. 30640 SYMBOL(FX*16,FY*16),MES$,ZX,ZY,%FCOL,,PSET,FTYPE
  2066. 30650 FCOL=0
  2067. 30660 RETURN
  2068. 30670 :
  2069. 30680 :
  2070. 30690 *CWIN_SUB : 'cw_x1,cw_y1,cw_x2,cw_y2,cw_ofs,cw_sw
  2071. 30700  OUT &H440,17:OUT &H443,PEEK(VARPTR(CRTC(17))+2):OUT &HFDA0,&H0F
  2072. 30710  GOSUB *BG_ANIME
  2073. 30720  CWS_X1=16*CW_X1(CW_NO)   :CWS_Y1=16*CW_Y1(CW_NO)
  2074. 30730  CWS_X2=16*CW_X2(CW_NO)+15:CWS_Y2=16*CW_Y2(CW_NO)+15
  2075. 30740  IF CW_SW(CW_NO)=1 THEN
  2076. 30750   BEEP 363523,7,3000
  2077. 30760   GET@A(CWS_X1  ,CWS_Y1  )-(CWS_X2  ,CWS_Y2  ),CWIN,CW_OFS(CW_NO)*32
  2078. 30770   LINE (CWS_X1+0,CWS_Y1+0)-(CWS_X2  ,CWS_Y2  ),PSET,%4,B
  2079. 30780   LINE (CWS_X1+1,CWS_Y1+1)-(CWS_X2-1,CWS_Y2-1),PSET,%5,B
  2080. 30790   LINE (CWS_X1+2,CWS_Y1+2)-(CWS_X2-2,CWS_Y2-2),PSET,%4,B:'最外枠
  2081. 30800   LINE (CWS_X1+3,CWS_Y1+3)-(CWS_X2-3,CWS_Y2-3),PSET,%5,B
  2082. 30810   LINE (CWS_X1+4,CWS_Y1+4)-(CWS_X2-4,CWS_Y2-4),PSET,%6,B
  2083. 30820   LINE (CWS_X1+5,CWS_Y1+5)-(CWS_X2-5,CWS_Y2-5),PSET,%5,B
  2084. 30830   LINE (CWS_X1+6,CWS_Y1+6)-(CWS_X2-6,CWS_Y2-6),PSET,%4,B:'最内枠
  2085. 30840   LINE (CWS_X1+7,CWS_Y1+7)-(CWS_X2-7,CWS_Y2-7),PSET,%5,B
  2086. 30850   LINE (CWS_X1+8,CWS_Y1+8)-(CWS_X2-8,CWS_Y2-8),PSET,%4,B
  2087. 30860   LINE (CWS_X1+9,CWS_Y1+9)-(CWS_X2-9,CWS_Y2-9),OPAQUE,%8,BF,W_TILE$(W_TYPE)
  2088. 30870  ELSE
  2089. 30880   PUT@A(CWS_X1  ,CWS_Y1  )-(CWS_X2  ,CWS_Y2  ),CWIN,,,,,CW_OFS(CW_NO)*32
  2090. 30890  ENDIF
  2091. 30900  RETURN
  2092. 30910  :
  2093. 30920  *CWIN_INPUT
  2094. 30930   CW_X=16*(CW_X1(CW_NO)+1):CW_YMIN=16*(CW_Y1(CW_NO)+1):CW_YMAX=CW_Y2(CW_NO)-CW_Y1(CW_NO)-2
  2095. 30940   :
  2096. 30950   GOSUB *PAD_WAIT2:GOSUB *PAD_INPUT
  2097. 30960   PD=PAD(1):PG=PTRIG(1)
  2098. 30970   IF PD=1 OR PD=5 THEN
  2099. 30980    PUT@A(CW_X,CW_YMIN+16*CY(CW_NO))-(CW_X+15,CW_YMIN+16*CY(CW_NO)+15),W_TILE%
  2100. 30990    IF PD=1 THEN CY(CW_NO)=CY(CW_NO)-1:IF CY(CW_NO)<      0 THEN CY(CW_NO)=CW_YMAX
  2101. 31000    IF PD=5 THEN CY(CW_NO)=CY(CW_NO)+1:IF CY(CW_NO)>CW_YMAX THEN CY(CW_NO)=      0
  2102. 31010    SYMBOL(CW_X,CW_YMIN+16+16*CY(CW_NO)-2),"▽",1,1,%15,1
  2103. 31020   ENDIF
  2104. 31030   IF PG=1 OR PG=2 THEN CY=CY(CW_NO):RETURN
  2105. 31040   GOTO 30950
  2106. 31050   :
  2107. 31060   :
  2108. 31070 *DUM_RET
  2109. 31080  RETURN
  2110. 31090  :
  2111. 31100 *PAD_WAIT
  2112. 31110  WHILE PAD(1)<>0 OR PTRIG(1)<>0:GOSUB *BG_ANIME:WEND:RETURN
  2113. 31120  :
  2114. 31130 *PAD_WAIT2
  2115. 31140  FOR DUM=1 TO CS:GOSUB *BG_ANIME:NEXT:RETURN
  2116. 31150  :
  2117. 31160 *PAD_INPUT
  2118. 31170  WHILE PAD(1)=0 AND PTRIG(1)=0:GOSUB *BG_ANIME:WEND:RETURN
  2119. 31180  :
  2120. 31190  :
  2121. 31200 *VOLUME_SET
  2122. 31210  OUT &H4E3,4:OUT &H4E2,63-VOLUME:OUT &H4E3,5:OUT &H4E2,63-VOLUME:RETURN
  2123. 31220  :
  2124. 31230 *MODE_CHANGE
  2125. 31240  IF TEST_MODE=1 THEN ON SCAN_FLG+1 GOSUB *HIGH_SCAN,*MID_SCAN,*LOW_SCAN
  2126. 31250  OUT &H448,1:OUT &H44A,0
  2127. 31260  RETURN
  2128. 31270  :
  2129. 31280  :
  2130. 31290 *MODE_REPAIR
  2131. 31300  IF MONO_FLG=1 THEN FOR I=1 TO 16:PALETTE I-1,[I*16-1,I*16-1,I*16-1]:NEXT ELSE PALETTE
  2132. 31310  PUT@A (0,0)-(735,479),S_BUF%
  2133. 31320 *TEST_SCAN
  2134. 31330  RESTORE 31360
  2135. 31340  FOR I=0 TO 31:READ A$:CRTC(I)=VAL("&h"+A$)+(VAL("&h"+A$)>32767)*65536!
  2136. 31350    OUT &H440,I:OUT &H442,CRTC(I),2:NEXT
  2137. 31360  DATA 0010,0322,0000,0000,038D,0000,0004,0000
  2138. 31370  DATA 0419,009a,036a,00a9,019a,0046,0406,0066
  2139. 31380  DATA 0246,0000,009a,0000,0080,0000,00aa,0000
  2140. 31390  DATA 0080,0058,0001,0000,8007,0000,0000,01CA
  2141. 31400  OUT &H440,28:OUT &H442,&H07:OUT &H443,&H80
  2142. 31410  OUT &H448, 0:OUT &H44A,&H1D:OUT &H448,1:OUT &H44A,&H08
  2143. 31420  X_RATIO=40:'横比率 1.125倍 横ドット数 720dot
  2144. 31430  Y_RATIO= 0:'縦比率 1.000倍 縦ドット数 480dot
  2145. 31440  RETURN
  2146. 31450  :
  2147. 31460  :
  2148. 31470 *SCAN_CHANGE
  2149. 31480  SCAN_FLG=SCAN_FLG+1:IF SCAN_FLG=3 THEN SCAN_FLG=0
  2150. 31490  ON SCAN_FLG+1 GOTO *HIGH_SCAN,*MID_SCAN,*LOW_SCAN
  2151. 31500  RETURN
  2152. 31510  :
  2153. 31520  :
  2154. 31530 *HIGH_SCAN
  2155. 31540  RESTORE 31570
  2156. 31550  FOR I=0 TO 31:READ A$:CRTC(I)=VAL("&h"+A$)+(VAL("&h"+A$)>32767)*65536!
  2157. 31560    OUT &H440,I:OUT &H442,CRTC(I),2:NEXT
  2158. 31570  DATA 0010,0322,0000,0000,038D,0000,0004,0000
  2159. 31580  DATA 0419,009A,036A,009A,036A,0046,0406,0046
  2160. 31590  DATA 0406,0000,009A,0000,0080,0000,009A,0000
  2161. 31600  DATA 0080,0064,0001,1200,8007,0000,0000,01CA
  2162. 31610  OUT &H440,28:OUT &H442,&H07:OUT &H443,&H80
  2163. 31620  OUT &H448, 0:OUT &H44A,&H1D:OUT &H448,1:OUT &H44A,&H08
  2164. 31630  X_RATIO=40:'横比率 1.125倍 横ドット数 720dot
  2165. 31640  Y_RATIO= 0:'縦比率 1.000倍 縦ドット数 480dot
  2166. 31650  RETURN
  2167. 31660  :
  2168. 31670 *MID_SCAN
  2169. 31680  RESTORE 31710
  2170. 31690  FOR I=0 TO 31:READ A$:CRTC(I)=VAL("&h"+A$)+(VAL("&h"+A$)>32767)*65536!
  2171. 31700    OUT &H440,I:OUT &H442,CRTC(I),2:NEXT
  2172. 31710  DATA 004c,03bc,0000,0000,0407,0000,0010,0000
  2173. 31720  DATA 036f,00cf,039f,00cf,039f,0002,036f,0002
  2174. 31730  DATA 036f,f600,00cf,0100,0080,0300,00cf,0000
  2175. 31740  DATA 0080,004A,0001,1200,8007,0002,0000,0192
  2176. 31750  OUT &H440,28:OUT &H442,&H07:OUT &H443,&H80
  2177. 31760  OUT &H448, 0:OUT &H44A,&H1D:OUT &H448,1:OUT &H44A,&H08
  2178. 31770  X_RATIO= 40:'横比率 1,125倍  横ドット数 720dot
  2179. 31780  Y_RATIO=-60:'縦比率 0.875倍 縦ドット数 420dot
  2180. 31790  RETURN
  2181. 31800  :
  2182. 31810 *LOW_SCAN
  2183. 31820  RESTORE 31850
  2184. 31830  FOR I=0 TO 31:READ A$:CRTC(I)=VAL("&h"+A$)+(VAL("&h"+A$)>32767)*65536!
  2185. 31840    OUT &H440,I:OUT &H442,CRTC(I),2:NEXT
  2186. 31850  DATA 0086,0610,0000,0000,071B,0006,000C,0012
  2187. 31860  DATA 020C,0179,0679,01A1,0651,003a,01fa,003A
  2188. 31870  DATA 01FA,0000,0179,0080,0100,0800,01A1,0000
  2189. 31880  DATA 0080,0064,0007,0401,8007,000C,0003,01CA
  2190. 31890  OUT &H440,28:OUT &H442,&H07:OUT &H443,&H80
  2191. 31900  OUT &H448, 0:OUT &H44A,&H1D:OUT &H448,1:OUT &H44A,&H08
  2192. 31910  X_RATIO=  0:'横比率 1.000倍  横ドット数 640dot
  2193. 31920  Y_RATIO=-32:'縦比率 0.933倍 縦ドット数 448dot
  2194. 31930  RETURN
  2195. 31940  :
  2196. 31950 *BAS_SCAN
  2197. 31960  CALLM SPR_OFF,255,0,SPR_QUANTITY
  2198. 31970  CALLM REPLACE,0,&H0120,&H40000,0,0,1024*512/2/2,255:CLS 4:'頁2画面消去
  2199. 31980  RESTORE 32010
  2200. 31990  FOR I=0 TO 31:READ A$:CRTC(I)=VAL("&h"+A$)+(VAL("&h"+A$)>32767)*65536!
  2201. 32000    OUT &H440,I:OUT &H442,CRTC(I),2:NEXT
  2202. 32010  DATA 0060,02c0,0000,0000,031f,0000,0004,0000
  2203. 32020  DATA 0419,008A,030A,008A,030A,0046,0406,0046
  2204. 32030  DATA 0406,0000,008A,0000,0080,0000,008A,0000
  2205. 32040  DATA 0080,0058,0001,0000,800f,0002,0000,0192
  2206. 32050  OUT &H448, 0:OUT &H44A,&H15:OUT &H448,1:OUT &H44A,&H08
  2207. 32060  RETURN
  2208. 32070  :
  2209. 32080  :
  2210. 32090 *INTERRUPT
  2211. 32100  SPRITE ON:SPRITE OFF:SCREEN@ 0:CLS:PLAY OFF:END
  2212. 32110  END
  2213. 32120  :
  2214. 32130  :
  2215. 32140  :
  2216. 32150 *ERROR
  2217. 32160  IF ERR=63 AND ERL>=10710 AND ERL=<11580 THEN *エラー
  2218. 32170  IF ERR=63 THEN *エラー
  2219. 32180  IF ERR=53 AND ERL<22460 AND ERL>22320 THEN MX=608:MY=400:RESUME 22740
  2220. 32190  IF ERR=72 THEN *エラー
  2221. 32200  IF ERR=111 AND ERL=12170 THEN DEF_FLG=0:RESUME 12180
  2222. 32210  :
  2223. 32220  :' CD関係のエラー処理
  2224. 32230  :
  2225. 32240  IF ERL>=14720 AND ERL=<14850 THEN RESUME *CD_PLAYER_BAD_END
  2226. 32250  IF ERL>=14860 AND ERL=<14870 THEN RESUME *CD_INFORMATION_BAD_END
  2227. 32260  IF ERL>=14900 AND ERL=<14910 THEN RESUME *CD_STATUS_BAD_END
  2228. 32270  IF ERL>=14940 AND ERL=<15030 THEN RESUME *CD_FADEOUT_BAD_END
  2229. 32280  IF ERL>=15250 AND ERL=<15330 THEN INTERVAL OFF:RESUME *CD_REPEAT_BAD_END
  2230. 32290  :
  2231. 32300  *エラー
  2232. 32310   SPRITE ON:SPRITE OFF:SCREEN@ 0
  2233. 32320   FX=21:FY=19:MES$="エラーが発生しました":GOSUB *PRINT
  2234. 32330   FX=21:FY=21:MES$="  エラー発生行:"+STR$(ERL):GOSUB *PRINT
  2235. 32340   FX=21:FY=23:MES$="  エラー番号 :"+STR$(ERR):GOSUB *PRINT
  2236. 32350   END
  2237.